我有要从大量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)
我想做的是:
帮助!
这是我填充的方式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更好。