Python:用短语进行分词
我有一些文本块想要进行分词,但我不想按照空格和标点符号来分词,因为像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 个回答
1
如果你事先不知道具体的短语,可以试试scikit这个库里的CountVectorizer()类。这个类可以让你设置更大的n-gram范围(ngram_range),然后忽略那些在足够多的文档中没有出现的词(min_df)。这样你可能会发现一些你之前没注意到的常见短语,但也可能会碰到一些没有意义的词。此外,它还有一个选项可以通过stop_words参数过滤掉英语中的一些无意义词(比如“is”这样的词)。
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书的第七章。