2013-08-04 69 views
0

我正在研究基於Python/NLTK和非英文unicode文本的NLP項目。爲此,我需要在一個句子中搜索unicode字符串。在Python中搜索Unicode字符

有一個.txt保存了一些非英語unicode句子的文件。使用NLTK PunktSentenceTokenizer我打破了他們,並保存在一個Python列表。

sentences = PunktSentenceTokenizer().tokenize(text) 

現在我可以通過列表迭代,並得到各sentence分開。


什麼,我需要做的就是通過sentence和識別單詞具有給定的Unicode字符。

實施例 -

sentence = 'AASFG BBBSDC FEKGG SDFGF' 

假設上面的文字是非英語unicode和我需要找到與GF結束則返回全詞字(可以是詞的索引)。

search = 'SDFGF' 

同樣地,我需要找到BB開始得到它的詞的話。

search2 = 'BBBSDC' 

回答

1

如果我理解正確的話,你就必須分裂句成詞,環比每一個並檢查它是否結束或與所需的字符開頭,如:

>>> sentence = ['AASFG', 'BBBSDC', 'FEKGG', 'SDFGF'] 
>>> [word for word in sentence.split() if word.endswith("GF")] 
['SDFGF'] 

sentence.split()可能可能喜歡的東西nltk.tokenize.word_tokenize(sentence)

更新更換,對於評論:

怎樣才能字,前面的這一點,背後

enumerate功能可用於給每個單詞一個數字,像這樣:

>>> print list(enumerate(sentence)) 
[(0, 'AASFG'), (1, 'BBBSDC'), (2, 'FEKGG'), (3, 'SDFGF')] 

然後,如果你做的同一圈,但保留指數:

>>> results = [(idx, word) for (idx, word) in enumerate(sentence) if word.endswith("GG")] 
>>> print results 
[(2, 'FEKGG')] 

..你可以使用索引來獲取下一個或前一個項目:

>>> for r in results: 
...  r_idx = r[0] 
...  print "Prev", sentence[r_idx-1] 
...  print "Next", sentence[r_idx+1] 
... 
Prev BBBSDC 
Next SDFGF 

你需要處理在比賽中的第一個或最後一個字(if r_idx == 0if r_idx == len(sentence)

+0

現在我得到了另外一個問題的情況下。從上面的代碼中,我可以找到以給定字母結尾或開頭的單詞。如何能夠在它之前和之後獲得詞彙。例如,如果我搜索GG並獲得了FEKGG,那麼我需要將BBBSDC作爲字前置,SDFGF和字後置。 – ChamingaD

+1

@ChamingaD更新回答問題 – dbr