我想標記文本塊,但我不想標記空白和標點符號,因爲似乎是標準工具,如NLTK。有一些特定的短語我想被標記爲單個標記,而不是常規標記。Python:使用短語進行標記
例如,考慮到「西翼是由Aaron Sorkin創作的美國電視系列劇」,該劇在1999年9月22日至2006年5月14日在美國國家廣播公司播出,並且將該短語添加到標記器「 the west wing,」由此產生的標記是:
- 西翼
- 是
- 的
- 美國
- ...
完成此操作的最佳方法是什麼?我寧願保持在像NLTK這樣的工具範圍內。
我想標記文本塊,但我不想標記空白和標點符號,因爲似乎是標準工具,如NLTK。有一些特定的短語我想被標記爲單個標記,而不是常規標記。Python:使用短語進行標記
例如,考慮到「西翼是由Aaron Sorkin創作的美國電視系列劇」,該劇在1999年9月22日至2006年5月14日在美國國家廣播公司播出,並且將該短語添加到標記器「 the west wing,」由此產生的標記是:
完成此操作的最佳方法是什麼?我寧願保持在像NLTK這樣的工具範圍內。
如果你有一組固定的短語,你正在尋找,那麼簡單的解決方案是標記輸入並「重新組裝」多詞的標記。或者,在執行The West Wing
到The_West_Wing
的標記化之前,執行正則表達式搜索&。
對於更高級的選項,請使用regexp_tokenize
或請參閱chapter 7 of the NLTK book。
可以使用多字表達標記生成器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']
如果你不事先知道特定的短語,你可能使用scikit的CountVectorizer()類。它可以選擇指定較大的n-gram範圍(ngram_range),然後忽略沒有出現在足夠文檔中的任何單詞(min_df)。你可能會認爲你沒有意識到的一些短語是常見的,但你也可能會發現一些沒有意義的短語。它還可以使用stop_words參數過濾掉英語停用詞('is'等無意義的詞)。
'regex_tokenize'和'NLTK書籍的第7章鏈接需要登錄名和密碼。 – Murta 2015-01-10 03:19:45