首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中使用短语和词干快速查找词典

在python中使用短语和词干快速查找词典
EN

Stack Overflow用户
提问于 2017-11-15 12:44:07
回答 2查看 595关注 0票数 1

我正在用python构建一个文本分类器,并为每个类提供了一个关键短语列表。例如,课程可以是“旅行”和“科学”,清单可以包括:

  • 旅行:“纽约”、“韩国”、“首尔”等。
  • 科学:“科学家”、“化学”等。

我正在寻找最好的方法来匹配python中这样的列表中的短语。

例如,文件的结果:

一位著名的科学家从纽约到韩国首尔

应该是:“科学”:1“旅行”:3

即使字符串的"in“运算符得到了很好的优化,也有几种情况需要处理:

  • 字界:在某种程度上,我可以在字典中找到" to“,而不想在”明天“中匹配"to”。在这种情况下,标记化是可行的,但是短语需要一些自定义逻辑,可能是标记列表中的子列表查找。
  • 词干:当列表中有“科学家发现”时,也应该与“科学家发现”相匹配。

是否有一个可有效处理此问题的python库?如果我需要从头开始实现它,在性能方面处理上述问题的最佳方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-14 10:55:47

你想要实现的是词组搜索。我认为这是一项文本挖掘任务,并在搜索引擎中实现。

首先,您需要tokenizestemmer函数。令牌可以非常简单,如下所示:

代码语言:javascript
复制
def tokenize(string):
    return fiter(lambda x: len(x) < 1, remove_punctuation(string).split())

在pypi上有各种各样的茎器。

您将得到如下所示的函数:

代码语言:javascript
复制
def preprocess(string):
    return [stemmer(word) for word in tokenize(string)]

然后,您要查找的函数如下所示:

代码语言:javascript
复制
from collections import Counter


def count(dictionary, phrase):
    counter = Count()
    phrase = preprocess(phrase)
    for topic, string in dictionary.items():
        stems = preprocess(string)
        indices = find(phrase, stem[0])
        for index in indices:
            found = True
            for stem in stems[1:]:
                if phrase[index + 1] == stem:
                   continue
                else:
                   found = False
                   break
            if found:
               counter[topic] +=1
    return counter

dictionary变量包含以下信息:

  • 旅行:“纽约”、“韩国”、“首尔”等。
  • 科学:“科学家”、“化学”等。
票数 1
EN

Stack Overflow用户

发布于 2017-11-15 12:54:06

在这种情况下,一个简单的解决方案是使用字典理解:

代码语言:javascript
复制
s = "A famous scientist traveled from New York to Seoul, South Korea"
d = {"travel":["New York", "South Korea", "Seoul"], "science": ["scientist", "chemical"]}
final_results = {a:sum(i in s for i in b) for a, b in d.items()}

输出:

代码语言:javascript
复制
{'science': 1, 'travel': 3}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47307765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档