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