规范化餐厅菜肴列表
Normalizing a list of restaurant dishes
我有一个很大的餐厅菜肴数据集(例如,"Pulled Pork"、"Beef Brisket"...)
我正在尝试"normalize"(单词错误)菜品。我希望 "Pulled Pork" 和 "Pulled Pork Sandwich" 以及 "Jumbo Pork Slider" 都映射到一个盘子 "Pulled Pork"。
到目前为止,我已经使用 Python 开始使用 NLTK,并且在使用频率分布等方面玩得很开心。
有没有人有解决这个问题的高级策略?也许我可以输入一些关键字 google?
谢谢
听起来您正在有效地尝试做 coreference resolution on named entities, where the entities are distinct dishes. You can check out projects like cort
and nltk-drt
。
但是,根据您的示例,有点不清楚为什么手撕猪肉三明治应被视为与手撕猪肉相同的菜肴,因此您可能需要一种方法来提出自己的训练集(例如从 google) 将实体标记为在您所需的公差范围内不同。
您可能需要查找 TFIDF
和 cosine similarity
。
然而,也有一些具有挑战性的案例。假设您有以下三道菜:
- 手撕猪肉
- 拉鸡蛋
- 鸡蛋三明治
您要合并两者中的哪一个?
- 拉猪肉拉鸡蛋
- 拉鸡蛋和鸡蛋三明治
使用TFIDF
,可以找到最具有代表性的词。例如sandwich这个词可能恰好出现在很多菜品中,因此不太具有代表性。 (金枪鱼三明治、鸡蛋三明治、奶酪三明治等)合并金枪鱼三明治和奶酪三明治可能不是一个好主意。
在你有了TFIDF向量之后,你可以使用余弦相似度(使用TFIDF向量)和一个静态阈值,你可以决定是否合并它们。
还有一个问题是:匹配的时候,你给他们起什么名字? (拉鸡蛋还是鸡蛋三明治?)
更新:
@alvas 建议在获得 similarity/dissimilarity 值后使用聚类。我认为那是个好主意。您可以先使用与 TFIDF 向量的余弦相似度来创建 nxn
distance/similarity 矩阵。在你有了距离矩阵之后,你可以使用聚类算法对它们进行聚类。
我有一个很大的餐厅菜肴数据集(例如,"Pulled Pork"、"Beef Brisket"...)
我正在尝试"normalize"(单词错误)菜品。我希望 "Pulled Pork" 和 "Pulled Pork Sandwich" 以及 "Jumbo Pork Slider" 都映射到一个盘子 "Pulled Pork"。
到目前为止,我已经使用 Python 开始使用 NLTK,并且在使用频率分布等方面玩得很开心。
有没有人有解决这个问题的高级策略?也许我可以输入一些关键字 google?
谢谢
听起来您正在有效地尝试做 coreference resolution on named entities, where the entities are distinct dishes. You can check out projects like cort
and nltk-drt
。
但是,根据您的示例,有点不清楚为什么手撕猪肉三明治应被视为与手撕猪肉相同的菜肴,因此您可能需要一种方法来提出自己的训练集(例如从 google) 将实体标记为在您所需的公差范围内不同。
您可能需要查找 TFIDF
和 cosine similarity
。
然而,也有一些具有挑战性的案例。假设您有以下三道菜:
- 手撕猪肉
- 拉鸡蛋
- 鸡蛋三明治
您要合并两者中的哪一个?
- 拉猪肉拉鸡蛋
- 拉鸡蛋和鸡蛋三明治
使用TFIDF
,可以找到最具有代表性的词。例如sandwich这个词可能恰好出现在很多菜品中,因此不太具有代表性。 (金枪鱼三明治、鸡蛋三明治、奶酪三明治等)合并金枪鱼三明治和奶酪三明治可能不是一个好主意。
在你有了TFIDF向量之后,你可以使用余弦相似度(使用TFIDF向量)和一个静态阈值,你可以决定是否合并它们。
还有一个问题是:匹配的时候,你给他们起什么名字? (拉鸡蛋还是鸡蛋三明治?)
更新:
@alvas 建议在获得 similarity/dissimilarity 值后使用聚类。我认为那是个好主意。您可以先使用与 TFIDF 向量的余弦相似度来创建 nxn
distance/similarity 矩阵。在你有了距离矩阵之后,你可以使用聚类算法对它们进行聚类。