Python 基于字符串候选列表的模糊匹配

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

我有一个公司名称列表,我正试图从大量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 = []
candidates = []

for ent in doc.ents:
  if ent.label_ == "ORG":
    candidates.append(ent.text)

process.extractBests(company_name, candidates, score_cutoff=80)
我想做的是:

  • 通读文档字符串
  • 解析任何模糊的公司名称 得分为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)]}