Python:使用短语进行分词

10

我有一些文本块需要进行分词,但是不想使用空格和标点符号进行分词,因为像NLTK这样的工具通常采用这种方式。有特定的短语需要作为一个单独的标记进行分词,而不是常规的分词。

例如,给定句子“the West Wing is an American television serial drama created by Aaron Sorkin that was originally broadcast on NBC from September 22, 1999 to May 14, 2006”,并将短语“the west wing”添加到分词器中,则结果标记应如下所示:

  • the west wing
  • is
  • an
  • american
  • ...

最佳方法是什么? 我更喜欢在NLTK等工具的范围内解决此问题。

3个回答

10

您可以使用NLTK的多词表达式分词器MWETokenizer

from nltk.tokenize import MWETokenizer
tokenizer = MWETokenizer()
tokenizer.add_mwe(('the', 'west', 'wing'))
tokenizer.tokenize('Something about the west wing'.split())

你将获得:

['Something', 'about', 'the_west_wing']

3
如果您有一组固定的短语需要查找,那么简单的解决方案是对输入进行分词并“重新组合”多个单词的标记。或者,在对输入进行分词之前,使用正则表达式搜索和替换将The West Wing转换为The_West_Wing
对于更高级的选项,请使用regexp_tokenize或参见NLTK书籍的第7章

regex_tokenizeNLTK 书籍第七章 的链接需要登录和密码。 - Murta

1
如果你事先不知道特定的短语,可以使用scikit的CountVectorizer()类。它有选项来指定更大的n-gram范围(ngram_range),然后忽略任何在足够文档中没有出现的单词(min_df)。你可能会发现一些常见的短语,但也可能会发现一些毫无意义的短语。它还有一个选项可以使用stop_words参数过滤掉英语停用词(像'is'这样的无意义单词)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接