2015-10-16 63 views
0

我想知道我們是否可以使用文本文件作爲標記化的手段。例如,假設有一個文件(字典),並且你想標記你檢查第一個字典來標記。你可以使用字典(文本)正則表達式標記化嗎?

如:

Dict_list = [環境測試中,蘋果貓,其餘測試]

文本:環境試驗是世界蘋果貓最好的蘋果是在測試休息。

假設文本列表很大,字典也很大,所以如果我們想標記它會標記空格,但是我需要標記整個文本但是我想檢查dict_list看看它是否應該是一個標記。

所以令牌應該是:

令牌道: 「」, 「環境試驗」, 「是」, 「的」, 「最好的蘋果」, 「中」, 「中」, 「世界」, 「蘋果貓」,「是」,「該」,「測試休息」。

我希望這是有道理的。

預先感謝您。

+0

不,這沒有意義。你有一些代碼,預期的結果和實際結果嗎?或者這是一個哲學問題。 – RobertB

+0

@Sam這是你的解決方案:http://www.nltk.org/api/nltk.tokenize.html – mertyildiran

+0

@RobertB,我有一個文本文件,我需要標記。我們不能使用普通的正則表達式/標記器來標記文檔,所以我需要一種標記這些文本的方法。如果我能結合正則表達式和字典,我相信會更容易。我的問題是,如果這是可能的。 – Sam

回答

1

這是一種方式,但一種替代方法:

Python3版本:

from nltk.tokenize import regexp_tokenize 

sent = "I like apple fruit but grape fruit more" 
dict_list = ["apple fruit", "grape fruit"] 
newdict = {} 
for item in dict_list: 
    dk = item.replace(" ", "_") 
    newdict[item] = dk 

for key, val in newdict.items(): 
    if key in sent: 
     sent = sent.replace(key, val) 

res = regexp_tokenize(sent, pattern='\S+') 
print(res) 

輸出:

[ 'I', '象', 'apple_fruit' ,'but','grape_fruit','more']

如果您願意,您可以用空格替換所有下劃線。

+0

嗨Kmario,我看到你正在使用字典,我可以用列表做同樣的事情嗎?而不是字典:我需要列表:除此之外,這是我正在尋找。 – Sam

+0

嗨山姆!當然,你可以使用字典,因爲查找的運行時間複雜度是O(1)。 – kmario23

+0

感謝您的快速回復。我需要使用這個列表,因爲我所說的「字典」是列表格式。當我說字典時,我想用它作爲普通字典來查看它以正確標記 – Sam

1

隨着nltk.tokenize包,你可以很容易地做到這一點。例如:

>>> tokenizer.tokenize('Testing testing testing one two three'.split()) 
['Testing', 'testing', 'testing', 'one', 'two', 'three'] 

>>> tokenizer = MWETokenizer([('hors', "d'oeuvre")], separator='+') 
>>> tokenizer.tokenize("An hors d'oeuvre tonight, sir?".split()) 
['An', "hors+d'oeuvre", 'tonight,', 'sir?'] 
+0

這與我所尋找的有點不同。注意我不需要+,也想知道我們是否可以在字典中使用其他正則表達式。是否有可能結合正則表達式和字典? – Sam

+0

我認爲這是一個很好的解決方案。 '+'在令牌中,而不在源中。如果你不喜歡它,那麼改變它或者把它拿出來。 – RobertB

+0

@mertyiliran,我試圖使用多詞表達式標記器。但是,當我使用從nltk.tokenize導入MWETokenizer。我收到錯誤ImportError:無法導入名稱'MWETokenizer'。你知道是什麼導致這個錯誤。我正在使用python 3.4 – Sam

相關問題