代码之家  ›  专栏  ›  技术社区  ›  Aviv

对于在文本中搜索单词的快速python包,有什么建议吗?

  •  0
  • Aviv  · 技术社区  · 7 年前

    我正在寻找一个python包,它将获得一个单词列表,而不是根据给定的单词列表在文本中搜索一个单词。

    我试过用FlashText( http://flashtext.readthedocs.io/en/latest/ )

    所以我构建了一个类,从文件中添加关键字 code: keyword_processor.add_keyword(word)

    而不是在文本中搜索关键字 code: keyword_processor.extract_keywords(text)

    但是我也得到了部分单词,例如我有一个“关键字”(希伯来语):x×x

    还有一句话:××××××××××××××××××××××××××的意思是§••••••••••••••••••••••••••••

    “一个被发现的关键字”这个词出现了,因为它里面有“一个被发现的关键字”,所以它对我不好……

    这里的任何人都有使用不同的python包的经验,该包正在执行我在这里描述的操作,并且不会返回“部分关键字”? 也许和flashtext一样快,从我参加的测试来看,速度非常快。

    1 回复  |  直到 7 年前
        1
  •  2
  •   PiCTo Vijay Panchal    7 年前

    为什么不使用 re ?

    import re
    
    s = 'asef se fese fes fse se'
    words = ['se', 'fes', 'foo']
    words_re = '(?:^|\s+)({})(?:$|\s+)'.format('|'.join(words))
    re.findall(words_re, s)
    

    会回来的 ['se', 'fes', 'se'] 这句话来自 words 在中找到 s ,按找到它们的顺序,包括重复项。

    regex含义:

    • 一个词或以字符串开头,或以空格开头: (?:^|\s+)
    • 一个单词要么结束字符串,要么后面跟一个空格: (?:$|\s+)
    • 我们不在乎什么是对这个词的训诫或追随: (?:...)
    • | 是“或”:我们想要一个词: '|'.join(words)
    • 我们要捕获找到的单词: ({})

    在单词前后添加更多可接受的字符(我正在考虑 , , . ,…)。


    或者,如果您在文本中查找单词,查找器将返回您已经拥有的单词。如果您这样做的原因是为了检查该单词是否在文本中,您可以使用 in :

    text = '...' # your input text
    words = ['foo', 'bar']
    
    words_in_text = [word for word in words if word in text]