我在python中构建了一个文本分类器,我有一个每个类的关键短语列表。例如,课程可以是"旅行"和"科学"和列表可以包含:
我正在寻找匹配python中此类列表中的短语的最佳方法。
例如,文档的结果:
一位着名科学家从纽约前往韩国首尔
应该是: "科学":1 "旅行":3
即使" in"字符串的运算符已经过优化,还有一些情况需要处理:
是否有一个可以有效处理这个问题的python库?如果我需要从头开始实现它,那么在性能方面处理上述问题的最佳方法是什么?
答案 0 :(得分:1)
你试图实现的是对词干的短语搜索。它是文本挖掘 我认为并在搜索引擎中实现的任务。
首先,您需要tokenize
和stemmer
个功能。 Tokenize可以
就像这样简单:
def tokenize(string):
return fiter(lambda x: len(x) < 1, remove_punctuation(string).split())
pypi上有各种词干分析器。
您最终会得到如下函数:
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
dictionary
变量包含以下信息:
答案 1 :(得分:0)
在这种情况下,一个简单的解决方案是使用字典理解:
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}