Python 基于字符串候选列表的模糊匹配
我有一个公司名称列表,我正试图从大量PDF文档中解析这些名称 我已经通过ApacheTika强制PDF提取原始文本,我已经获得了200家公司的列表 我一直在尝试使用fuzzyfuzzy和Spacy的组合来提取所需的匹配项 就我所知:Python 基于字符串候选列表的模糊匹配,python,python-3.x,spacy,apache-tika,fuzzywuzzy,Python,Python 3.x,Spacy,Apache Tika,Fuzzywuzzy,我有一个公司名称列表,我正试图从大量PDF文档中解析这些名称 我已经通过ApacheTika强制PDF提取原始文本,我已经获得了200家公司的列表 我一直在尝试使用fuzzyfuzzy和Spacy的组合来提取所需的匹配项 就我所知: import spacy from fuzzywuzzy import fuzz, process nlp = spacy.load("en_core_web_sm") doc = nlp(strings[1]) companies = [] candidate
import spacy
from fuzzywuzzy import fuzz, process
nlp = spacy.load("en_core_web_sm")
doc = nlp(strings[1])
companies = []
candidates = []
for ent in doc.ents:
if ent.label_ == "ORG":
candidates.append(ent.text)
process.extractBests(company_name, candidates, score_cutoff=80)
我想做的是:
救命啊 这是我填充
候选者的方式--mpg
是一个数据帧:
for s in mpg['name'].values:
doc = nlp(s)
for ent in doc.ents:
if ent.label_ == 'ORG':
candidates.append(ent.text)
那么,假设我们有一个简短的汽车数据列表,仅用于测试:
candidates = ['buick'
,'buick skylark'
,'buick estate wagon'
,'buick century']
下面的方法使用了fuzz.token\u sort\u ratio
,它被描述为“返回0和100之间序列相似性的度量,但在比较之前对token进行排序”。请尝试此处部分记录的一些方法:
结果是:
In [53]: results
Out[53]: {'buick': [('buick', 100),
('buick skylark', 56),
('buick century', 56)]}
在这种情况下,使用80作为截止分数比使用50更好。您见过这个线程吗?有几篇文章带有GitHub链接,链接到结合这两个库的工作代码。嘿,伙计,我确实看到了这篇文章,但我从中跳了出来。我是否遗漏了一些关于如何使用它来解决这个问题的信息?嗨,谢谢你的回答,你可以看到我要去哪里。如果“别克”品牌有多个标准呢?通过第二个列表,[AAA]可以成为一个iterable吗?process.extractBests([AAA],候选者,记分者=fuzz.token\u sort\u ratio,score\u cutoff=50)
不客气。我更新了答案,在公司中循环。如果有帮助,请告诉我。谢谢,伙计。当我吃完午饭回家后,我会试试这个,如果它运行,我会标记为正确。很好,不用担心。我将在答案中添加另一部分,这样您就有了存储结果的好方法。太好了。再次感谢。
In [53]: results
Out[53]: {'buick': [('buick', 100),
('buick skylark', 56),
('buick century', 56)]}