字符串搜索以任何顺序搜索一行中的短语

时间:2018-02-02 12:37:02

标签: java python string search full-text-search

我正在尝试以任意顺序匹配单词来实现短语搜索。 但是,添加的任何额外单词应该说不匹配。

例如

"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请建议

4 个答案:

答案 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']]