Контекстно-специфический орфографический движок - PullRequest
2 голосов
/ 08 июня 2009

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

Я не видел эту технику раньше, но есть ли примеры где-нибудь еще?
и если да, то есть ли примеры кода и литература для его работы?

Ответы [ 4 ]

12 голосов
/ 08 июня 2009

Мои 2 цента. Учитывая тот факт, что translate.google.com является статистическим механизмом машинного перевода и «Необоснованной эффективностью данных» от А. Галеви, П. Норвиг (директор по исследованиям в Google) и Ф. Перейра: Я делаю предположение (держу пари), что это статистически управляемая проверка орфографии .

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

Например, если ваш корпус состоит только из:

I had bean soup last diner.

Из этой записи вы создадите следующие биграммы (наборы из 2 слов):

I had, had bean, bean soup, soup last, last diner

и триграммы (наборы из 3 слов):

I had bean, had bean soup, bean soup last, soup last diner 

Но они будут сокращены с помощью тестов статистической значимости, например: мы можем предположить, что триграмма

I had bean 

исчезнет из таблицы фраз.

Теперь, проверка орфографии будет только смотреть на эти большие фразы и проверять "вероятности". (Вам нужна хорошая инфраструктура для хранения этих фраз-таблиц в эффективной структуре данных и в оперативной памяти, у Google она есть для translate.google.com, почему бы и нет? Это проще, чем статистический машинный перевод.)

Пример: вы вводите

I had been soup

и в фразе есть

had bean soup

триграмма с гораздо большей вероятностью, чем то, что вы только что набрали! В самом деле, вам нужно всего лишь изменить одно слово (это «не очень отдаленная» триграмма), чтобы получить триграмму с гораздо большей вероятностью. Должна быть оценочная функция, имеющая дело с компромиссом расстояние / вероятность. Это расстояние можно даже рассчитать в терминах символов: мы выполняем проверку орфографии, а не машинный перевод.

Это только мое гипотетическое мнение. ;)

1 голос
/ 11 декабря 2009

Есть много статей на эту тему. Вот несколько хороших ресурсов

Это не использует контекстную чувствительность, но это хорошая основа для построения http://norvig.com/spell-correct.html

Это, вероятно, хороший и простой для понимания вид более мощной проверки орфографии http://acl.ldc.upenn.edu/acl2004/emnlp/pdf/Cucerzan.pdf

Отсюда вы можете углубиться в детали. Я бы порекомендовал использовать Google scholar и найти ссылки в статье выше, а также найти «исправление орфографии»

1 голос
/ 18 июня 2009

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

Если вам интересна такая тема, я настоятельно рекомендую использовать NLTK (набор инструментов на естественном языке), полностью написанный на python. Это очень обширная работа, в которой много инструментов и довольно хорошая документация.

1 голос
/ 18 июня 2009

Вам также следует посмотреть официальное видео Кейси Уайтлоу из команды Google Wave, в котором описаны используемые методы: http://www.youtube.com/watch?v=Sx3Fpw0XCXk

...