匹配来自两个不同收据的两个项目

数据挖掘 相似 距离 文本 余弦距离
2022-02-14 04:41:30

我有两张不同的发票或收据。一种是采购订单,一种类似于收据(确认)。

假设我订购了(PO)葡萄酒:

  1. 白酒
  2. 红酒
  3. 桃红葡萄酒

我收到以下确认:

  1. 酒红雅各布斯溪
  2. 白酒
  3. Winter's Hill Estate 干玫瑰

我想匹配采购订单和发票中的字符串(项目)。

你能建议我做这件事的方法吗?

我尝试使用Count Vectorization Alg进行矢量化 然后使用距离度量来计算相似度:'dice'、'rogerstanimoto'、'yule'、'hamming'、'jaccard'、'braycurtis'、'canberra'、'cityblock'、 “相关”、“余弦”、“欧几里得”和“明可夫斯基”

问题是单词的位置。

红酒不会与酒红相似。但事实并非如此。

我也尝试过 Word2Vec 算法,但从技术上讲,这不仅仅是名词。它不起作用。

3个回答

您可以尝试一些近似的字符串匹配,它给出了一个置信度分数。例如,您可以尝试使用 Levenshtein 距离,但使用概率模型根据字符串的长度进行调整;或者,您可以尝试在 3-gram 上使用 Jaccard 相似度并在词边界上进行特殊处理,然后校准为概率。现在你有一个 n × n 的概率矩阵。

在此之后,您需要执行匹配。最终的可能性是每个单一概率的乘积。为了最大化它,您可以尝试最大化单个概率的对数总和。对每个概率取对数后,这现在变成了一个(加法)分配问题,在RPython中有实现。

如果您使用的是 Python,请尝试使用fuzzywuzzy包:

FuzzyWuzzy

像老板一样的模糊字符串匹配。它使用 Levenshtein Distance 来计算简单易用包中序列之间的差异。

来源

Word Mover 的距离 (WMD)是一种用于查找短语之间距离的算法。WMD 基于词嵌入(例如 word2vec),将词的语义编码为密集向量。

WMD 距离衡量两个文本文档之间的差异,作为一个文档的嵌入词需要“旅行”以到达另一个文档的嵌入词的最小距离量。

例如:

在此处输入图像描述 资料来源:“从词嵌入到文档距离”论文

gensim有一个WMD 实现

对于您的问题,您将比较采购订单项目和发票项目。找到具有最低 WMD 的项目。