来自字符串候选列表的模糊匹配

问题描述 投票:1回答:1

我有要从大量PDF文档中解析的公司名称列表。

[我已通过Apache Tika强制通过PDF提取原始文本,并且已经阅读了200家公司的清单。

我被困在尝试使用FuzzyWuzzy和Spacy的某种组合来提取所需的匹配项。

据我所知:

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)

我想做的是:

  1. 通读文档字符串
  2. 解析任何模糊的公司名称得分超过80的比赛]
  3. 返回包含在文档及其分数。

帮助!

python python-3.x spacy apache-tika fuzzywuzzy
1个回答
0
投票

这是我填充的方式candidates-mpg是Pandas DataFrame:

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_sort_ratio,它被描述为“返回0至100之间序列相似性的度量,但在比较之前对标记进行排序”。尝试一些此处部分记录的内容:https://github.com/seatgeek/fuzzywuzzy/issues/137

results = {} # dictionary to store results 
companies = ['buick'] # you'll have more companies
for company in companies:
    results[company] = process.extractBests(company,candidates,
                                            scorer=fuzz.token_sort_ratio,
                                            score_cutoff=50)

结果是:

In [53]: results                                                                
Out[53]: {'buick': [('buick', 100), 
                    ('buick skylark', 56), 
                    ('buick century', 56)]}

在这种情况下,使用80作为临界值会比50更好。

© www.soinside.com 2019 - 2024. All rights reserved.