如果没有JAVA的外部资源,我们如何从推文中删除(或检测)非英语标记
我如何在保留标签(#xxx)、URL(@xxxx)和提及(@xxx)的情况下从推文中删除非英语标签? 我发现: 所容纳之物replaceAll(“\W”和“”) 这里:Remove all non-"word characters" from a String in Java, leaving accented characters?,但它并没有真正的帮助。 我知道有很多语言检测工具,比如微软one,以及其他复杂的方法,但是我想要一些正则表达式,或者我可以在JAVA中使用的方法,而不需要外部资源(比如字典)。 这是推文的一个例子:“Meeeeeee!RT@missLOVElace_33;:谁想要我的80000条推文?”
如果JAVA中有方法可以检测推文是否是非英语的,那将非常棒。这里有一个类似的例子: http://babel-fett.heroku.com/ 但它是用红宝石做的
谢谢
# 1 楼答案
一个词不是英语有两个条件(如果一个词不是英语,通常你可以断定这个短语不是英语)
1-检查第一个字母是否不是大写:无论语言是什么,专有名词都保持不变
2-所有英文字母都包含在[a-zA-Z]中,所以我想检查一个单词是否是英语并不难。下面是一个非详尽的字符列表,例如英语中不存在的字符:
但基本上,每个不匹配的单词都不是英语。。。(除非单词的第一个字母是大写字母,我重复一遍)
但是你看,即使是在线工具也是这样。就拿这句话来说,Hoark blerk,它没有任何意义,你的工具检测到它是英语,因为我没有使用任何非字母。因此,如果你真的想深入研究,你必须创建一个包含所有英语单词的数据库(我认为它已经存在),并检查你的单词是否与词典的任何条目匹配。。。但我怀疑你真的想这么精确
记住保留
@whatever
和#whatever_again
,有括号和没有括号(使用简单的正则表达式很容易实现)。别忘了忽略表情符号,比如笑脸等。除非一种语言包含这些符号作为字母,你应该保留它们;)# 2 楼答案
我使用了java正则表达式:content。replaceAll(“[^A-Za-z0-9-##\s],”)。。。这很有效。。 我正在寻找java语言检测器;我正在寻找一个强大的工具,离线工作。。我找到了这个:http://code.google.com/p/language-detection/wiki/GettingStarted 我认为这是一个很好的例子。 其他相关问题如下:https://stackoverflow.com/q/1923844/1515897,How to detect language of user entered text?