python - 规范化餐厅菜肴列表

标签 python machine-learning nlp nltk

我有一个很大的餐厅菜肴数据集(例如,“手撕 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/

相关文章:

python - 如何使用在 kivy 中作为按钮按下时播放的动画 gif?

python - 两个客户端和一台服务器之间的 Rpyc 接口(interface)

python - 格式化 float 列表

python - 使用 Pipeline 和 GridSearchCV 完成的训练数量

python - 如何使用 AsyncResult 重试已撤销的 Celery 任务

python - 预测全零

machine-learning - 神经网络将数据分为 3 类,没有规则

nlp - 处理英文报表

sql - 如何在 SQL 中使用 Wordnet

perl - Perl 中是否有 Penn Treebank Tokenizer 的实现?