如何在Scala中识别表情符号?

7
我正在处理来自Twitter API的推文,很多推文都带有表情符号。我试图跟踪最常用的表情符号,但实际上我很难识别它们。
我正在使用:https://github.com/iamcal/emoji-data 来识别表情符号。
我不知道如何确定一个字符串是否包含表情符号。我尝试使用正则表达式与表情数据中的“统一”字段,也尝试仅检查字符串是否包含该字段。我真的不确定如何检查表情符号... 任何帮助将不胜感激。
val pattern = new Regex("(${a.unified})")
(pattern findAllIn text).mkString(",")

我尝试使用正则表达式,但无法找到任何表情符号。我还尝试在来自表情符号数据的统一字段之前添加\u,但这并没有帮助。


我尝试使用正则表达式与表情符号数据的“unified”字段进行匹配 - 展示你尝试过的代码。 - l'L'l
2个回答

5
您可以使用以下正则表达式来查找表情符号(以及Unicode语言平面之外的其他字符): [^\u0000-\uFFFF] 例如,我们使用以下代码从字符串中过滤掉表情符号: "some string".replaceAll("[^\u0000-\uFFFF]", ""); 希望对您有所帮助。

那个正则表达式过滤掉了所有非拉丁字母表的符号,而不仅仅是表情符号。例如,你可以试试用它来过滤斯拉夫语字母。 - Valery Ryaboshapko

2

你的代码已经接近工作状态了。要从 text 中提取表情符号,请尝试以下方法:

"""\p{block=Emoticons}""".r.findAllIn(text).mkString

例如:

scala> val text = "Use regex and now you have two problems  "
scala> """\p{block=Emoticons}""".r.findAllIn(text).mkString
res0: String = 

不幸的是,它在复杂的表情符号上失败了,例如 ‍‍ 或只有 - Valery Ryaboshapko
@ValeryRyaboshapko 给正则表达式添加一些额外的块: """[\p{block=Emoticons}\p{block=Miscellaneous Symbols and Pictographs}\p{block=Supplemental Symbols and Pictographs}]""".r.findAllIn("‍‍ or just ").mkString 返回(不幸的是没有给出家庭表情符号) - darrenmc
@darrenmc 我遇到了一个错误,提示程序无法识别补充符号和象形文字。我需要导入任何库来将它们添加到我的正则表达式中吗? - tharindu
@tharindu,你不需要任何额外的导入,因为这已经内置在Java标准库中了。但是,你需要使用Java 10或更高版本才能支持“补充符号和象形文字”。 - darrenmc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接