2014-10-27 54 views
0

我正在嘗試編寫一個簡單的python腳本,用於導入* .txt文件並使用NLTK模塊對其進行標記。NLTK/Python:將文本標記爲固定令牌長度

我面臨的挑戰是必須標記完整的語料庫,但每個標記的長度必須小於或等於200個字符 - NLTK工具箱中是否存在可實現此功能的本機功能?

一個例子: Tokenising第幾段,以「戰爭與和平」的產生以下令牌是303個字符長

token = ["But I warn you, if you don't tell me that this means war, if you still try to defend the infamies and horrors perpetrated by that Antichrist--I really believe he is Antichrist--I will have nothing more to do with you and you are no longer my friend, no longer my 'faithful slave,' as you call yourself"] 

它仍包含標點符號(逗號,連字符),我可以寫一個函數使用這些類型的斷點來破解句子,我的問題是NLTK(或另一種語言解析器?)中是否已經存在本機功能,它可以做到這一點,並有效地處理角落案例?

+0

你能舉一個200字符的例子嗎?我不認爲我曾經見過有超過20或30個字符的人 – 2014-10-29 22:41:01

+0

我已經添加了一個例子 - 要清楚的字符數指的是字母,而不是令牌中的單詞(讓我知道如果這是不明確的,我可以編輯這個問題) – AdamDynamic 2014-10-29 22:50:44

+0

你真的跑過代碼?我不相信這是分詞器的作用。它應該輸出'[「但是」,「我」,「警告」] nltk,一個標記是句子的一部分,所以要說 - 或一個詞(但不總是) – 2014-10-29 22:57:55

回答

0

我不知道你正在嘗試做的,但如果你只想記號化的話有少於200個字符:

import nltk 
with open('somefile.txt','r') as fp: 
    tokenized_text = [word for word in nltk.tokenize.word_tokenize(fp.read()) if len(word) <= 200] 

這將只保留具有小於或令牌等於200個字符並丟棄其餘。如果您需要更多控制的粒度,您可能需要查看正則表達式。
P.S.對不起,如果我誤解了你的問題。

+0

感謝迴應 - 我不確定我的問題是否足夠清晰,我需要標記整個語料庫並讓所有標記少於200個字符,而不僅僅是符合標準的標記:) – AdamDynamic 2014-10-29 22:29:41