【问题标题】:Tokenizing Twitter Posts in Lucene在 Lucene 中标记 Twitter 帖子
【发布时间】:2010-03-31 17:26:09
【问题描述】:

简而言之,我的问题:有谁知道用于 Lucene 的 TwitterAnalyzerTwitterTokenizer

更详细的版本:

我想在 Lucene 中为许多推文编制索引,并保持 @user#hashtag 等术语不变。 StandardTokenizer 不起作用,因为它会丢弃标点符号(但它会做其他有用的事情,例如保留域名、电子邮件地址或识别首字母缩略词)。我怎样才能拥有一个分析器,它可以完成 StandardTokenizer 所做的所有事情,但不涉及 @user 和 #hashtag 之类的术语?

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

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

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

提前致谢!

澳大利亚

【问题讨论】:

标签: twitter lucene tokenize


【解决方案1】:

StandardTokenizer 和 StandardAnalyzer 基本上将您的标记传递给一个 StandardFilter(它从标准标记中删除各种字符,例如单词末尾的 's),然后是一个小写过滤器(将您的单词小写),最后是一个 StopFilter .最后一个删除了诸如“as”、“in”、“for”等无关紧要的词。

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

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

【讨论】:

  • 谢谢。我已经尝试使用 WhitespaceTokenizer 而不是 StandardTokenizer 来实现我自己的分析器。但这会使主机名、电子邮件地址和其他一些东西无法识别和错误地标记化。我想用我的自定义 TwitterTokenizer 处理一个流(它处理 @s 和 #s 什么都不做),然后将生成的流输入到 StandardTokenizer 并从那里继续。但是,据我了解,Analyzer 在链的开头只能有一个 Tokenizer。
  • 另一种方法可能是使用 PerFieldAnalyzerWrapper 并通过内容进行第二次传递以明确查找哈希标签和用户引用并将它们放在文档的单独字段中(例如“标签”和“回复” ')。然后,这些字段的分析器仅返回分别出现 #tag 和 @user 的标记。
  • 是的,这是有道理的。谢谢!
  • 链接已损坏。您现在可以查看分析器here
【解决方案2】:

使用本地处理 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>

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      关于 Twitter 特定标记器的教程,它是 ark-tweet-nlp API 的修改版本,可以在 http://preciselyconcise.com/apis_and_installations/tweet_pos_tagger.php 找到 此 API 能够识别推文中存在的表情符号、主题标签、感叹词等

      【讨论】:

        【解决方案5】:

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

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

        那么,您不只是在寻找一种方法来重做 Twitter 人员已经为您完成的事情吗?

        【讨论】:

          【解决方案6】:

          Twitter 开源文本处理库,实现标签等令牌处理程序。

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

          它基于lucene的TokenStream。

          【讨论】:

            猜你喜欢
            • 2012-02-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-28
            • 1970-01-01
            • 2012-03-03
            • 2014-08-15
            • 1970-01-01
            相关资源
            最近更新 更多