Скрипт php: word proximity?

Хорошо – так, я искал веки в Google и даже просмотрел несколько конкретных поисков в hotscripts и т. Д., Несколько форумов php и это место … ничего (не все равно).

я хочу, чтобы иметь возможность взять блок текста (page / file / doc) и разделить его, чтобы найти «расстояние» между определенными терминами (найти близость / раллиональное расстояние и т. д.).

Я подумал, что по крайней мере несколько таких тиков вокруг, но я их не нахожу. Так что это может быть сложнее, чем я думал. Я понимаю, что это может быть несколько «голодный» endevour – поскольку он может быть довольно интенсивным на больших документах, но, возможно, это возможно?

Infact – во время просмотра – большинство ссылок, которые я нахожу (кроме сайтов с ламо-повторением SEO), кажется, предлагает передовые лингвистические исследования, странные / продвинутые пакеты для установки на сервер и т. Д.

Могу ли я предположить, что «близость» представляет собой очень сложную проблему и потребует серьезных ресурсов и огромного развития? (Честно говоря, на мой взгляд это кажется несколько умеренным – так что мне интересно, что именно мне не хватает (Примечание: Простой в относительном смысле … Я бы сравнил его с легким (плотность / количество) до трудного ( слово stemming / base / thesaurusing)).

Итак – ссылки / предложения / идеи / мысли ???

Solutions Collecting From Web of "Скрипт php: word proximity?"

Я также думал о расстоянии Хэмминга, как прокомментировал Феликс Клинг. Возможно, вы можете сделать какой-то вариант, где вы кодируете свои слова в определенные кодовые слова, а затем проверяете их расстояния через массив, содержащий ваши кодовые слова.

Поэтому, если у вас есть массив [11, 02, 85, 37, 11], вы можете легко найти, что 11 имеет максимальное расстояние 4 в этом массиве.

Не знаю, будет ли это работать для вас, но я думаю, что я сделал бы это аналогичным образом.

Если вы говорите об отдельных сравнениях слов, вам нужно посмотреть на функцию SOUNDEX MySQL. (Предположим, вы можете использовать mysql). При сравнении двух слов вы можете получить ссылку на то, как они звучат:

SELECT `word` FROM `list_of_words` WHERE SOUNDEX(`word`) = SOUNDEX('{TEST_WORD}'); 

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

 $word = '{WORD TO CHECK}'; $distance = 4; // the smalled the distance the closed the word foreach($word_results as $comparison_word) { $distance = levenshtein($comparison_word, $word); if($distance < $threshold) { $threshold = $distance; $similar_word = $comparison_word; } } echo $similar_word; 

Надеюсь, это поможет вам найти направление, которое вы ищете.

Счастливое кодирование!

ваш пример искал Word1 … Word2, должен ли Word2 … Word1 также соответствовать? Простое решение – использовать RegEx:

то есть:

  1. use regex: \ bWord1 \ b (. *) \ bWord2 \ b
  2. в первой группе совпадений используйте пространство (или любую другую границу), чтобы разбить его на массив, и считать

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

Обновить:

После того, как 2 вопроса будут объединены, я увижу другие ответы, в которых упоминается расстояние между звуковыми дорожками, левинштейном и расстоянием для хамминга и т. Д. Я бы предложил theclueless1 для того, чтобы ЗАВЕРШИТЬ требования, чтобы люди могли оказать полезную помощь. Если это приложение, связанное с поиском или кластеризацией документов, я также предлагаю вам взглянуть на зрелые полнотекстовые индексирующие / поисковые решения, такие как сфинкс или люцен. Я думаю, что любой из них можно использовать с PHP.