Как я считаю слова и выражения в тексте? - PullRequest
2 голосов
/ 27 июля 2011

Я хочу посчитать, сколько раз некоторые заданные слова или фразы появляются в тексте, но я хочу использовать некоторые алгоритмы подобия строк.

Каждое слово или выражение имеет значение, поэтому я установлю релевантностьтекст в соответствии с количеством найденных слов и т. д.

Я предполагаю, что класс String из Java не может предложить это.Мне нужно будет повторить весь текст для каждого слова или выражения, которое я хочу найти?

Есть ли библиотека для обработки текста?

Пример: найти тексты, в которых есть "видеоигра", "iесть видеоигра "и как-то так, оценивая подобные выражения.Я предполагаю, что если я выполню итерацию для каждого слова или выражения, которое мне нужно оценить, я не смогу найти похожие слова, и это будет медленнее.

Ответы [ 3 ]

1 голос
/ 27 июля 2011

Перевернутый индекс, который сказал Денисс, это то, что вы ищете. Вам нужно будет очень хорошо определить свой документ, если вы хотите мощный двигатель.

Для совпадений фраз ваш документ должен иметь положение слова (ключ карты) в этом документе. После того, как вы получили все слова, которые искали, вы можете узнать, были ли эти слова вместе в оригинальном документе.

Например:

doc1: "Hello World"
doc2: "Hello Beautiful World"

inverted index {
  "Beautifull": [(doc2, 2)],
  "Hello": [(doc1, 1)(doc2, 1)],
  "World": [(doc1, 2)(doc2, 3)],
}

query: "Hello World"

В обоих документах есть слова "Hello" и "World", но в doc1 они есть вместе (позиции 1 и 2), а в doc2 нет (позиции 1 и 3).

Если вы хотите найти похожих слов , вам понадобится новая структура. Во-первых, вам нужно определить, на что похоже. Расстояние Левенштейна - это то, что вам нужно для этого.

Для его реализации вам понадобится целое новое строение, подобное автомату: Автомат Левенштейна .

Полнотекстовый поиск - огромная область. Внедрить поисковую систему сложно, и многие библиотеки и приложения уже делают это.

(я работаю на Indextank.com - систему полнотекстового поиска в режиме реального времени. Если вам нужна поисковая система, работающая через пару минут, попробуйте нас)

1 голос
/ 27 июля 2011

но я хочу использовать некоторые алгоритмы сходства строк.

Взгляните на Lucene . Позволяет индексировать текст и искать работы с использованием алгоритма сходства. Я думаю, что вы хотите разделить каждое слово и проиндексировать их, используя lucene. Тогда по всем интересующим вас словам вы можете искать по указателю. Вы можете делать такие вещи, как Automobile~, что сделает нечеткий поиск. Вот грубый алгоритм:

for each word in STRING.split(' ')
  index word

for each word in your list
  search for word and look for number of occurrences
0 голосов
/ 27 июля 2011

Что вам нужно, так это структура данных Inverted File. Я узнал об этом в классе базы данных, и вот ссылка на лекцию.

http://dl.dropbox.com/u/8950924/16Sp11-Search.pdf

По сути, идея состоит в том, чтобы иметь структуру данных Map

Map<String, List<Document>> invertedIndex;

где строка - это слово, а List<Document> - документы, содержащие это слово.

Если вы прочитаете больше в этот PDF-файл, вы даже сможете найти способ ранжировать документ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...