我正在尝试以任意顺序匹配单词来实现短语搜索。 但是,添加的任何额外单词应该说不匹配。
例如
"i want pizza"
在任何情况下都应符合以下条件。
"want i pizza"
"i want pizza"
"pizza want i"
但它不应该与搜索字符串中的任何单词匹配。
不应该匹配:
"i want a pizza on monday"
任何人都可以在任何JAVA,C#或Python中引导我使用此实现。
目前我正在使用MYSQL全文搜索。但需要实施此解决方案以避免全文搜索的错误。如果有任何方法可以直接使用FULL TEXT搜索MYSQL请建议
答案 0 :(得分:1)
在java中:
public static void main(String[] args){
String str = "i want pizza";
List<String> list = Arrays.asList("want i pizza", "i want pizza", "pizza want i","i want a pizza on monday");
list.stream()
.filter(s->Arrays.asList(str.split(" ")).containsAll(Arrays.asList(s.split(" "))))
.forEach(System.out::println);
}
答案 1 :(得分:0)
在python代码中执行此操作的一种方法是使用拆分和比较。
A = "i want pizza"
V = ["want i pizza", "i want pizza", "pizza want i", "i want a pizza on monday"]
A = sorted(A.split())
match = [i for i in V if A == sorted(i.split())]
print match
<强>输出:强>
['want i pizza', 'i want pizza', 'pizza want i']
答案 2 :(得分:0)
当键是您想要找到的单词时,您可以使用散列映射,并且值是一个布尔值,表示是否在句子中找到了。 如果没有找到其中一个单词或句子中的单词不存在则返回false; 其他明智的是:
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(scanTheWords("want i pizza") );
System.out.println(scanTheWords("i want pizza") );
System.out.println(scanTheWords("i want a pizza on monday") );
}
public static boolean scanTheWords (String sentence)
{
HashMap<String, Boolean> words = new HashMap<>();
words.put("i", false);
words.put("want", false);
words.put("pizza", false);
String [] senteceWord = sentence.split(" ");
for(String s: senteceWord)
{
if(!words.containsKey(s))
return false;
else
words.put(s, true);
}
for ( boolean b : words.values())
{
if(b==false)
return false;
}
return true;
}
}
输出
真 真正 假
答案 3 :(得分:0)
将python与set:
一起使用query = "i want a pizza".split()
l = ["want i pizza", "i want pizza", "pizza want i", "i want a pizza on monday"]`
l = [x.split() for x in l]
print([x for x in l if set(x) - set(query)==set() ])
<强>输出:强>
[['want', 'i', 'pizza'], ['i', 'want', 'pizza'], ['pizza', 'want', 'i']]