基于字典的模糊匹配

时间:2018-07-24 06:59:02

标签: string string-matching spacy fuzzy-comparison fuzzywuzzy

我想匹配SeqString中的实体出现。例如:

dict_data = ['johnson', 'apple platform']
SeqString = 'Johnson buys a new phone which is based on Apppple Platform. Johnson very likes the Apple Platform.'

预期结果:

比赛1:约翰逊<=>约翰逊,start_char:0,end_char:7,相似度得分

第2场:Apppple平台<=>苹果平台,开始字符:43,结束字符:59,相似度得分

比赛3:约翰逊<=>约翰逊,开始字符:61,结束字符:68,相似度得分

匹配4:Apple平台<=> apple平台,开始字符:84,结束字符:98,相似度得分

简而言之,dict_data非常大。我想将dict_data中的实体与阈值进行匹配。

我尝试过:

  1. spaCy库。但是,它基于完全匹​​配。它无法处理Apppple Platform

  2. fuzzywuzzy库,它具有方法SequenceMatcher.get_matching_blocks(),但是,“三元组在i和j中单调递增”。这意味着它不能匹配johnson的第二次出现。

我的案子有解决办法吗?

1 个答案:

答案 0 :(得分:0)

根据可用的数据量,您可能会考虑使用精确匹配来生成训练数据,以使用(https://spacy.io/usage/training#section-ner)来训练NER中的自定义实体。 NER应该能够进行模糊匹配(以及更多)。但是,您应该尝试确保将仅与模糊匹配的文本保留在训练数据之外(否则,您将在训练NER时也不会检测到Apppple Platform)。