2013-06-13 2 views
4

Я ищу простой алгоритм или библиотеку с открытым исходным кодом (PHP), позволяющую оценить, использует ли текст в основном конкретный язык. Я нашел following answer, относящийся к Python, который, вероятно, ведет в правильном направлении. Но что-то готовое для PHP для PHP было бы очарованием.Алгоритм определения вероятного языка текста

Конечно, что-то вроде оценки n-грамм не будет слишком сложно реализовать, но для этого требуется также база данных ссылок.

Реальная проблема заключается в следующем. Я запустил блог WordPress, который в настоящее время затоплен SPAM. Блог находится на немецком языке, и практически весь трекбэк-спам - английский. Моя идея состоит в том, чтобы немедленно спамить все трекбэки, которые кажутся английскими. Однако я не могу использовать слова маркера, потому что я не хочу спамить опечатки или цитаты.

Мое решение:

Используя ответы на этот вопрос я реализовал решение, которое детектирует немецкого простого соотношения стоп-слов. Любой комментарий должен содержать не менее 25% немецких задержек, если у него есть ссылка. Таким образом, вы все еще можете комментировать что-то вроде «классной статьи», которая вообще не имеет паролей, но если вы поместите ссылку, вы должны потрудиться, чтобы написать правильный язык.

К сожалению, временные слова из NLTK неверны. Список содержит слова, которые не существуют на немецком языке. Поэтому я использовал список snowball. Используя Perl regexp optimizer, я сконфигурировал весь список в одно регулярное выражение и подсчитал стоп-слова с помощью preg_match_all(). Весь фильтр имеет 25 строк, треть кода Perl для создания регулярного выражения из списка. Посмотрим, как это происходит в дикой природе.

Благодарим за помощь.

+0

Почему вы не используете akismet? – jraede

+1

Вы можете получить много данных, загрузив материал из проекта-gutenberg для разных языков. Однако то, что вы ищете, - это спам-классификатор - в зависимости от того, сколько спама вы собрали в своем блоге, это может быть довольно простой задачей. Возможно, вы хотите обновить свой вопрос с большей информацией. –

+0

@jraede Akismet имеет юридические вопросы. Я не хочу передавать законные комментарии через любой внешний сервер.В противном случае мне пришлось бы включить заявление о конфиденциальности в форму комментариев, что может отпугнуть реальных комментаторов. –

ответ

1

Я согласен с @Thomas, что то, что вы ищете, является классификатором спама, а не алгоритмом определения языка. Тем не менее, я думаю, что это решение для определения языка достаточно просто и доступно, как вы хотите. В принципе, если вы считаете количество стоп-слов на разных языках и выбираете язык с большим количеством из них в документе, у вас есть простой, но очень эффективный языковой классификатор.

Теперь самое лучшее, что вам не нужно кодировать почти все, так как вы можете использовать стандартный список стоп-слов и пакеты обработки, такие как nltk, для обработки информации. Here у вас есть пример того, как реализовать его с нуля с помощью Python и nltk.

Надеюсь, это поможет.

+0

Хорошая ссылка. Не должно быть слишком сложно извлечь стоп-слова из Python в PHP и реализовать алгоритм в PHP. Если до выходных нет более простого решения, я бы попробовал. –

+0

Вы должны иметь возможность вызывать реализацию python из PHP и анализировать результат. Это может быть быстрее, чем повторное внедрение. – miguelmalvarez

+0

Может быть, идея. Мой хостер официально не предлагает Python, но я могу запустить Python из оболочки. Это будет зависеть от того, сколько модулей мне нужно будет устанавливать локально. –

0

Если все, что вы хотите сделать, это признать английский, тогда есть очень простой взлом. Если вы просто проверяете буквы в сообщении, английский является одним из единственных языков, которые будут полностью находиться в диапазоне чистого ASCII. Это хаки, но это приличное упрощение в противном случае очень сложная проблема, я считаю.

Мое предположение об эффективности, просто сделав несколько быстрых обратных расчетов по конверту на пару французских и немецких блогов, будет ~ 85%, что не является надежным, но довольно хорошо для простоты этого, я бы подумал.

+1

Многие комментарии, как правило, короткие, и у меня есть действующие немецкие комментарии, которые являются чистыми -ASCII. Ничего я не хочу спамить невидимым. –

Смежные вопросы