我的问题简而言之:有没有人知道Lucene的 TwitterAnalyzer 或 TwitterTokenizer ?
更详细的版本:
我想在Lucene中为一些推文编制索引,并保持 @user 或 #hashtag 等条款不变。 StandardTokenizer不起作用,因为它丢弃了标点符号(但它还有其他有用的东西,比如保留域名,电子邮件地址或识别首字母缩略词)。我怎样才能拥有一台分析仪,它可以完成StandardTokenizer所做的一切,但不会触及像@user和#hashtag这样的术语?
我目前的解决方案是在将推文发送到分析器之前对其进行预处理,并用其他字母数字字符串替换字符。例如,
String newText = newText.replaceAll("#", "hashtag");
newText = newText.replaceAll("@", "addresstag");
不幸的是,这种方法破坏了合法的电子邮件地址,但我可以忍受。这种方法有意义吗?
提前致谢!
AMAC
答案 0 :(得分:5)
StandardTokenizer和StandardAnalyzer基本上通过StandardFilter传递你的标记(它会删除标准标记中的所有类型的字符,比如单词的末尾),然后是小写过滤器(小写单词),最后是StopFilter 。最后一个删除了无关紧要的词,如“as”,“in”,“for”等等。
开始时你可以轻松做的是实现你自己的分析器,它执行与StandardAnalyzer相同的操作,但使用WhitespaceTokenizer作为处理输入流的第一个项目。
有关分析仪内部工作原理的详细信息,请查看here
答案 1 :(得分:1)
使用自定义标记程序来本地处理Twitter用户名会更干净。我在这里做了一个:https://github.com/wetneb/lucene-twitter
此令牌生成器将识别Twitter用户名和标签,并且可以使用配套过滤器将其小写(假定它们不区分大小写):
<fieldType name="text_twitter" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="org.opentapioca.analysis.twitter.TwitterTokenizerFactory" />
<filter class="org.opentapioca.analysis.twitter.TwitterLowercaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.opentapioca.analysis.twitter.TwitterTokenizerFactory" />
<filter class="org.opentapioca.analysis.twitter.TwitterLowercaseFilterFactory" />
</analyzer>
</fieldType>
答案 2 :(得分:0)
这里有一个特定于Twitter的标记器:https://github.com/brendano/ark-tweet-nlp/blob/master/src/cmu/arktweetnlp/Twokenize.java
答案 3 :(得分:0)
可以在http://preciselyconcise.com/apis_and_installations/tweet_pos_tagger.php找到关于twitter特定标记器的教程,它是ark-tweet-nlp API的修改版本。 此API能够识别推文中出现的表情符号,主题标签,插入内容等
答案 4 :(得分:0)
可以告诉Twitter API将已经从内容中解析出来的“实体”(hashtags,userIds,urls等)返回到集合中的所有Tweets,Bios等。
https://dev.twitter.com/docs/entities
那么,您是不是只想找到一种方法来重新做一些Twitter上的人已经为您做过的事情?
答案 5 :(得分:0)
Twitter开源有文本进程lib,为hashtag等实现了令牌处理程序。
如:HashtagExtractor https://github.com/twitter/commons/blob/master/src/java/com/twitter/common/text/extractor/HashtagExtractor.java
它基于lucene的TokenStream。