我正在基于Python / NLTK的非英语unicode文本的NLP项目。为此,我需要在句子中搜索unicode字符串。
有一个 .txt 文件,其中保存了一些非英语的unicode句子。我使用NLTK PunktSentenceTokenizer 破坏了它们并将其保存在python列表中。
sentences = PunktSentenceTokenizer().tokenize(text)
现在,我可以遍历列表并分别获取每个列表sentence。
sentence
我需要做的是仔细检查sentence并确定哪个单词具有给定的unicode字符。
范例-
sentence = 'AASFG BBBSDC FEKGG SDFGF'
假设上面的文本是非英语的unicode,我需要找到以结尾的单词,GF然后返回整个单词(可能是该单词的索引)。
GF
search = 'SDFGF'
同样,我需要找到以单词开头BB的单词。
BB
search2 = 'BBBSDC'
如果我理解正确,则只需将句子拆分成单词,循环遍历每个单词,然后检查它是否以所需的字符结尾或以以下字符开头,例如:
>>> sentence = ['AASFG', 'BBBSDC', 'FEKGG', 'SDFGF'] >>> [word for word in sentence.split() if word.endswith("GF")] ['SDFGF']
sentence.split() 可能会被类似 nltk.tokenize.word_tokenize(sentence)
sentence.split()
nltk.tokenize.word_tokenize(sentence)
更新 ,关于评论:
如何在其前面和后面获得单词
该enumerate函数可用于给每个单词一个数字,如下所示:
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))
if r_idx == 0
if r_idx == len(sentence)