сопоставьте большую строку с несколькими сотнями маленьких фраз - PullRequest
1 голос
/ 26 мая 2011

У меня есть тысячи больших строк, которые мне нужно сравнить / сопоставить с другим набором из сотен небольших фраз и слов, чтобы увидеть, содержатся ли эти фразы в большой строке.

Какой самый быстрый способ сделать это? Должен ли я просто использовать String.indexOf (...) или String.matches (normalExpression) или перейти на уровень байтов и т. Д. И т. Д.

(все совпадения должны быть без учета регистра; фразы «HI» и «hi» должны быть найдены в строке «Hi there».)

Какие-нибудь советы?

Редактировать: под "самым быстрым" я имею в виду производительность.

Ответы [ 3 ]

2 голосов
/ 27 мая 2011

A Дерево Trie / Prefix или Radix Tree , скорее всего, то, что вы ищете.

1 голос
/ 26 мая 2011

Я, вероятно, рассмотрю возможность использования aho-corasick или дерева префиксов для такой задачи.этот вопрос уже задавался в этом посте Java: сопоставление фраз в строке

0 голосов
/ 27 мая 2011

Какой самый быстрый способ сделать это?Должен ли я просто использовать String.indexOf (...) или String.matches (normalExpression), или мне нужно перейти на уровень байтов и т. Д. И т. Д.,ни на уровне байтов: Java использует юникод, обработка байтов может быть очень неудобной.String.indexOf () кажется разумным

(все совпадения должны быть без учета регистра; фразы «HI» и «hi» должны быть найдены в строке «Hi there».)

Я бы реализовал это, уменьшив как текст, так и строку поиска.(Если у вас есть смещения, вы можете получить исходный текст соответствия из исходной строки)

...