我想要标记化的文本块,但我不想对空格和标点符号进行标记,因为这似乎是NLTK等工具的标准。我希望将特定短语标记为单个标记,而不是常规标记化。
例如,鉴于句子“The West Wing是由Aaron Sorkin创作的美国电视连续剧,最初于1999年9月22日至2006年5月14日在NBC上播出”,并将该短语添加到令牌器“{ {3}},“产生的代币将是:
实现这一目标的最佳方法是什么?我宁愿呆在像NLTK这样的工具范围内。
答案 0 :(得分:2)
您可以使用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']
答案 1 :(得分:1)
如果您有一组固定的短语,那么简单的解决方案就是标记您的输入并“重新组合”多字标记。或者,进行正则表达式搜索&在标记化之前替换,将The West Wing
变为The_West_Wing
。
要获得更多高级选项,请使用regexp_tokenize
或查看chapter 7 of the NLTK book。
答案 2 :(得分:0)
如果您事先不知道特定的短语,则可以使用scikit的CountVectorizer()课程。它可以选择指定更大的n-gram范围(ngram_range),然后忽略任何没有出现在足够文档中的单词(min_df)。你可能会认出一些你没有意识到的常见的短语,但你也可能会发现一些毫无意义的短语。它还可以选择使用stop_words参数过滤掉英语停用词(无意义的单词,如'是')。