我需要一些JS库,它可以通过长文本请求匹配类别。
例如,我有类别Apples
,Red Apples
,Green Apples
,Oranges
和请求Red Juicy Apple 1 Kilo from Spain
。在这种情况下,类别应为Red Apples
。所以,简单的循环和contains()
是不够的。
我搜索了一些像https://github.com/NaturalNode/natural这样的库,但分类不合适,因为在我的情况下,我不知道所有可能的请求,也无法训练它。
也许我需要阻止请求,计算单词距离请求到类别并对其进行排序?
请帮我解决这个反全文搜索。
答案 0 :(得分:1)
一种非常基本的方式,但它符合您提供的单一示例:
var categories = [ "Apples", "Red Apples", "Green Apples", "Oranges" ];
var intputString = "Red Juicy Apple 1 Kilo from Spain";
var words = inputString.split(' ');
for (int wordIndex = 0; wordIndex < words.length; wordIndex++) {
for (int categoryIndex = 0; categoryIndex < categories.length; categoryIndex++) {
if (categories[categoryIndex].indexOf(words[wordIndex]) > -1) {
// The word words[wordIndex] is in the string categories[categoryIndex]
}
}
}
答案 1 :(得分:1)
我找到了http://glench.github.io/fuzzyset.js/,似乎有效。
>>f = FuzzySet(['Apples', 'Red Apples', 'Green Apples', 'Oranges'])
>>f.get("Red Juicy Apple 1 Kilo from Spain")
[Array[2]0: 0.3030303030303031: "Red Apples"length: 2__proto__: Array[0]]
希望它不仅假设英语......