0

如何在保留主题标签 (#xxx)、网址 (@xxxx) 和提及 (@xxx) 的情况下从推文中删除非英语标签?我在这里找到了: content.replaceAll("\W", " ") :从 Java 中的字符串中删除所有非“单词字符”,留下重音字符?,但它并没有真正帮助。我知道有很多语言检测工具,比如微软的,以及其他复杂的方法,但我想要一些正则表达式,或者我可以在 JAVA 中使用的方法,而无需外部资源(如字典)。这是推文的一个示例:“Meeeeeee!RT @missLOVElace_:谁想要我的 80,000 条推文?”

如果 JAVA 中有可以检测推文是否为非英语语言的方法,那就太好了。这里有一个类似的:http: //babel-fett.heroku.com/ ,但它是用 Ruby 编写的。

谢谢!

4

2 回答 2

1

我使用了 java 正则表达式: content.replaceAll("[^A-Za-z0-9-_@#\s]", "")... 它有效.. 我正在寻找 java 语言检测器;我正在寻找一种可以离线工作的强大工具。我找到了这个:http ://code.google.com/p/language-detection/wiki/GettingStarted 我认为这是一个很好的工具。其他相关问题在这里:https ://stackoverflow.com/q/1923844/1515897 ,如何检测用户输入文本的语言?.

于 2012-07-11T16:47:21.607 回答
0

嗯,一个词不是英语有两个条件(而且一个词不是英语,你可以断定这个短语不是,通常)。

1 - 检查第一个字母是否不是大写:专有名词保持不变,无论语言是什么

2 - 所有英文字母都包含在 [a-zA-Z] 中,所以我想检查一个单词是否是英文并不难。这是一个非详尽的字符列表,例如,在英语中不存在:

äàáãæå
ëèéê
ïìíî
òóôö
ð
ñ

但基本上,每个不匹配\w的单词都不是英语......(除非单词的第一个字母是大写字母,我再说一遍)。

但是你看,即使是在线的工具也是这样的。以没有意义的句子Hoark blerk 为例,您的工具将其检测为英语,因为我没有使用任何非 \w 字母。所以如果你真的想深入,你必须创建一个包含所有英文单词的数据库(我认为它已经存在)并检查你的单词是否与字典的任何条目匹配......但我怀疑你真的想要这样精确的。

请记住保留@whateverand #whatever_again,带和不带括号(使用简单的正则表达式可以很容易地实现)。并且不要忘记忽略标点符号,例如笑脸等。除非语言包含这些符号作为字母,否则您应该保留它们;)

于 2012-07-11T08:23:41.373 回答