1

テキスト内の特定の単語または複合語の出現を見つけようとしています。

たとえば、テキストは「Happy Birthday to you」で、一致させなければならないフレーズは「Happy Birthday」です。

入力テキストと照合する必要がある単語/フレーズの辞書があります。この辞書は、約3000語/複合語で構成されています。分析する必要があるテキストの数はさまざまです。現在、正規表現を使用しています。\b+フレーズ+\b. . これは私に正しい答えを与えますが、遅いです。

また、テキスト内で検出される単語の前後に、!、:、などの特殊文字が含まれている可能性があります。等

text.contains() は高速ですが、単語のサブセットに対しても true を返すため、使用できません。これをより速く行う方法はありますか?

4

4 に答える 4

0
     String text    =
                "This is the text to be searched " +
                 "for occurrences of the http:// pattern.";

     String patternString = "This is the";

     Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
     Matcher matcher = pattern.matcher(text);

     System.out.println("lookingAt = " + matcher.lookingAt());
     System.out.println("matches   = " + matcher.matches());

ソースは以下のURLから。詳しくは下記URLを一度ご確認ください。

マッチャー

于 2013-04-19T06:32:26.543 に答える
0

コードのパフォーマンスを低下させる可能性のある多くのindexOf()およびsubstring()メソッドを使用しましたが、以下のコードは、このアプローチへの最初のステップとして使用できます。java.lang.String

public class MultiWordCompare {

    private static boolean containsWord(String word, String search) {
        if(word.indexOf(search) >= 0) { // Try if the word first exists at all
            try {
                String w = word.substring(word.indexOf(search), word.indexOf(search)+search.length()+1); //+1 to capture possible space
                if(w.lastIndexOf(" ") == w.length()-1) { //if the last char is space, then we captured the whole word
                    w = w.substring(0, w.length()-1); //remove space
                    return w.equals(search); //do string compare
                }
            }
            catch(Exception e) {
                //catching IndexOutofBoundException
            }
        }
        return false;
    }

    public static void main(String [] args) {
        System.out.println(containsWord("New York is great!", "New York"));
        System.out.println(containsWord("Many many happy Returns for the day", "happy Returns"));
        System.out.println(containsWord("New Authority", "New Author"));
        System.out.println(containsWord("New York City is great!", "N Y C"));
    }

}

そして、ここに出力があります

true
true
false
false
于 2013-04-08T10:10:40.923 に答える