我有一个很大的餐厅菜肴数据集(例如,“手撕 pig 肉”、“牛腩”……)
我正在尝试“正常化”(错误的词)菜肴。我希望“Pulled Pork”、“Pulled Pork Sandwich”和“Jumbo Pork Slider”都映射到一道菜“Pulled Pork”。
到目前为止,我已经开始使用 Python 使用 NLTK,并且在使用频率分布等方面玩得很开心。
有没有人有解决这个问题的高级策略?也许我可以用谷歌搜索一些关键字?
谢谢
最佳答案
您可能需要查找TFIDF
和余弦相似度
。
然而,也有一些具有挑战性的案例。假设您有以下三道菜:
- 手撕 pig 肉
- 拉鸡蛋
- 鸡蛋三明治
您要结合两者中的哪一个?
- 拉肉拉鸡蛋
- 拉鸡蛋和鸡蛋三明治
使用TFIDF
,您可以找到最具代表性的词。例如sandwich这个词可能恰好出现在很多菜品中,因此不是很有代表性。 (金枪鱼三明治、鸡蛋三明治、奶酪三明治等)合并金枪鱼三明治和奶酪三明治可能不是一个好主意。
在你有了 TFIDF 向量之后,你可以使用余弦相似度(使用 TFIDF 向量)和一个静态阈值,你可以决定是否合并它们。
还有一个问题出现了:匹配的时候,你给他们起什么名字? (拉鸡蛋还是鸡蛋三明治?)
更新:
@alvas 建议在获得相似性/相异性值后使用聚类。我认为那是个好主意。您可以先使用 TFIDF 向量的余弦相似度创建您的 nxn
距离/相似度矩阵。在获得距离矩阵后,您可以使用聚类算法对它们进行聚类。
关于python - 规范化餐厅菜肴列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32235272/