python中短语和词干的快速词典查找

python中短语和词干的快速词典查找,python,nlp,text-mining,Python,Nlp,Text Mining,我正在用python构建一个文本分类器,每个类都有一个关键短语列表。例如,课程可以是“旅游”和“科学”,列表可以包含: 旅行:“纽约”、“韩国”、“首尔”等 科学:“科学家”、“化学”等 我正在寻找在python中匹配这些列表中的短语的最佳方法 例如,文档的结果: 一位著名的科学家从纽约旅行到韩国首尔 应该是: “科学”:1 “旅行”:3 即使字符串的“in”运算符得到了很好的优化,也有一些情况需要处理: 词界:在某种程度上,我可以在字典中有“to”,而不想在“明天”中匹配“to”。在这种

我正在用python构建一个文本分类器,每个类都有一个关键短语列表。例如,课程可以是“旅游”和“科学”,列表可以包含:

  • 旅行:“纽约”、“韩国”、“首尔”等
  • 科学:“科学家”、“化学”等
我正在寻找在python中匹配这些列表中的短语的最佳方法

例如,文档的结果:

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

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

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

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

有没有一个python库可以有效地处理这个问题?如果我需要从头开始实施它,那么从性能方面处理上述问题的最佳方法是什么?

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

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()}
输出:

{'science': 1, 'travel': 3}

您试图实现的是词干上的短语搜索。这是文本挖掘 我认为这个任务是在搜索引擎中实现的

首先,您需要
标记化
词干分析器
函数。标记化可以是 简单到:

def tokenize(string):
    return fiter(lambda x: len(x) < 1, remove_punctuation(string).split())
然后,您要查找的函数如下所示:

def preprocess(string):
    return [stemmer(word) for word in tokenize(string)]
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
字典
变量包含以下信息:

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

相当优雅,但没有解决两个问题-单词边界和n-gram词干