在Lucene中对Twitter帖子进行标记

问题描述 投票:6回答:6

我的问题简而言之:有没有人知道Lucene的TwitterAnalyzer或TwitterTokenizer?

更详细的版本:

我想索引Lucene中的一些推文并保持@user或#hashtag等条款不变。 StandardTokenizer不起作用,因为它丢弃了标点符号(但它还有其他有用的东西,比如保留域名,电子邮件地址或识别首字母缩略词)。我怎样才能拥有一台分析仪,它可以完成StandardTokenizer所做的一切,但不会触及像@user和#hashtag这样的术语?

我目前的解决方案是在将推文发送到分析器之前对其进行预处理,并用其他字母数字字符串替换字符。例如,

String newText = newText.replaceAll("#", "hashtag");
newText = newText.replaceAll("@", "addresstag");

不幸的是,这种方法破坏了合法的电子邮件地址,但我可以忍受这种方法有意义吗?

提前致谢!

目的

twitter lucene tokenize
6个回答
5
投票

StandardTokenizer和StandardAnalyzer基本上通过一个StandardFilter传递你的标记(它从标准标记中删除所有类型的字符,如单词末尾),然后是一个小写过滤器(小写你的单词),最后是一个StopFilter。最后一个删除了无关紧要的词,如“as”,“in”,“for”等。

您可以轻松地开始实施的是实现您自己的分析器,该分析器执行与StandardAnalyzer相同的操作,但使用WhitespaceTokenizer作为处理输入流的第一个项目。

有关分析仪的内部工作原理的更多详细信息,您可以查看here


1
投票

使用自然处理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>


0
投票

可以在http://preciselyconcise.com/apis_and_installations/tweet_pos_tagger.php上找到关于特定于twitter的tokenizer的教程,它是ark-tweet-nlp API的修改版本。此API能够识别推文中出现的表情符号,主题标签,插入等。


0
投票

可以告诉Twitter API将已经从内容解析的“实体”(hashtags,userIds,urls等)返回到集合中的所有Tweets,Bios等。

https://dev.twitter.com/docs/entities

那么,您是不是只想找到一种方法来重新做一些Twitter上的人已经为您做过的事情?


0
投票

Twitter开源有文本进程库,为hashtag等实现令牌处理程序。

例如:HashtagExtractor https://github.com/twitter/commons/blob/master/src/java/com/twitter/common/text/extractor/HashtagExtractor.java

它基于lucene的TokenStream。

© www.soinside.com 2019 - 2024. All rights reserved.