【问题标题】:Searching for Unicode characters in Python在 Python 中搜索 Unicode 字符
【发布时间】:2013-08-04 12:39:46
【问题描述】:

我正在开发一个基于 Python/NLTK 的 NLP 项目,其中包含非英语 unicode 文本。为此,我需要在句子中搜索 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'

【问题讨论】:

    标签: python unicode nltk


    【解决方案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)

    【讨论】:

    • 现在我有另一个问题。从上面的代码中,我可以找到以给定字母结尾或开头的单词。怎么能在前面和后面得到消息。例如,如果我搜索 GG 并得到 FEKGG,然后我需要将 BBBSDC 作为前面的单词和 SDFGF 和后面的单词。
    • @ChamingaD 更新答案
    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多