我有一大组餐厅菜品数据(例如,“拉猪肉”,“牛腩”…)
我试图对这些菜品进行“标准化”(这个词用得不准确),我想让“拉猪肉”、“拉猪肉三明治”和“巨型猪肉滑块”都映射到一个单一的菜品,“拉猪肉”。
到目前为止,我已经开始使用Python的NLTK,并尝试了一些频率分布等功能,玩得很开心。
有没有人有解决这个问题的总体策略?或许有一些我可以搜索的关键词?
谢谢
回答:
你可以查找TFIDF
和余弦相似度
。
然而,这其中有一些具有挑战性的情况。假设你有以下三种菜品:
- 拉猪肉
- 拉蛋
- 蛋三明治
你打算将哪两者合并?
- 拉猪肉和拉蛋
- 拉蛋和蛋三明治
使用TFIDF
,你可以找到最具代表性的词。例如,词三明治可能出现在许多菜品中,因此不那么代表性。(金枪鱼三明治、蛋三明治、奶酪三明治等)将金枪鱼三明治和奶酪三明治合并可能不是一个好主意。
在你获得TFIDF向量后,你可以使用余弦相似度(使用TFIDF向量)并可能设置一个静态阈值,来决定是否合并它们。
还有另一个问题会出现:当你匹配时,你打算如何命名它们?(拉蛋还是蛋三明治?)
更新:
@[隐藏人名]建议在获得相似度/不相似度值后使用聚类。我认为这是一个好主意。你可以首先使用余弦相似度和TFIDF向量创建你的nxn
距离/相似度矩阵。在你获得距离矩阵后,你可以使用聚类算法对它们进行聚类。