【问题标题】:Tokenizer, Stop Word Removal, Stemming in JavaJava 中的分词器、停用词删除、词干提取
【发布时间】:2010-12-12 11:28:22
【问题描述】:

我正在寻找一个类或方法,它需要包含 100 多个单词的长字符串并进行标记、删除停用词和词干以用于 IR 系统。

例如:

“大肥猫,对袋鼠说‘我认识的最有趣的人’……”

分词器将删除标点符号并返回一个 ArrayList 的单词

停用词删除器会删除“the”、“to”等词

词干分析器会减少每个单词的“词根”,例如“最有趣”会变得有趣

非常感谢。

【问题讨论】:

    标签: java tokenize stemming stop-words


    【解决方案1】:

    AFAIK Lucene 可以做你想做的事。使用StandardAnalyzerStopAnalyzer,您可以删除停用词。结合Lucene contrib-snowball(包括Snowball 的工作)项目,您也可以进行词干提取。

    但对于词干,还请考虑以下答案:Stemming algorithm that produces real words

    【讨论】:

    • 嘿! @jitter 去 Lucene 没有帮助吗?需要更具体的链接。
    【解决方案2】:

    这些是自然语言处理的标准要求,因此我会查看此类工具包。由于您需要 Java,我将从 OpenNLP 开始: http://opennlp.sourceforge.net/

    如果你可以看看其他语言,还有 NLTK (Python)

    请注意,“你是我认识的最有趣的人”不是标准语法,这比“你是我认识的最有趣的人”更难处理。并非不可能,但更难。我不知道有什么系统可以将“你的”等同于“你是”。

    【讨论】:

    • openNLP 中有主题建模吗?在描述中没有看到。
    【解决方案3】:

    我已经处理了我处理过的许多任务的问题,所以让我给出一个标记器建议。由于我没有看到它直接作为答案,我经常使用edu.northwestern.at.utils.corpuslinguistics.tokenizer.* 作为我的标记器系列。我看到很多使用PennTreebankTokenizer 类的案例。以下是您的使用方法:

        WordTokenizer wordTokenizer = new PennTreebankTokenizer();
        List<String> words = wordTokenizer.extractWords(text);
    

    此作品的链接是here。只是一个免责声明,我与西北航空、该集团或他们所做的工作没有任何关系。我只是偶尔使用代码的人。

    【讨论】:

    【解决方案4】:

    这里是NLP tools 的完整列表。有时自己创建这些是有意义的,因为它们会更轻,并且您可以更好地控制内部工作:使用简单的正则表达式进行标记化。对于停用词,只需将下面的列表或其他列表推送到 HashSet:

    common-english-words.txt

    这是众多Java implementation of porter stemer之一。

    【讨论】:

      猜你喜欢
      • 2011-09-01
      • 2011-04-22
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2016-05-21
      • 2011-03-12
      • 1970-01-01
      • 2013-06-08
      相关资源
      最近更新 更多