0

我正在开发一个基于 Python/NLTK 和非英语 unicode 文本的 NLP 项目。为此,我需要在句子中搜索 unicode 字符串。

有一个.txt文件保存了一些非英语的 unicode 句子。使用 NLTK PunktSentenceTokenizer我打破了它们并保存在 python 列表中。

sentences = PunktSentenceTokenizer().tokenize(text)

现在我可以遍历列表并sentence分别获取每个列表。


我需要做的是检查sentence并确定哪个单词具有给定的 unicode 字符。

例子 -

sentence = 'AASFG BBBSDC FEKGG SDFGF'

假设上面的文本是非英语 unicode,我需要找到以结尾的GF单词然后返回整个单词(可能是那个单词的索引)。

search = 'SDFGF'

同样,我需要找到以BBget the word 开头的单词。

search2 = 'BBBSDC'
4

1 回答 1

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 == 0, if r_idx == len(sentence))的情况

于 2013-08-04T12:53:48.247 回答