Правописание для совмещенных слов - PullRequest
4 голосов
/ 18 ноября 2009

Я работаю над реализацией функции проверки орфографии для веб-редактора WYSIWYG. В настоящее время я использую алгоритм расстояния Дамерау-Левенштейна, чтобы составить список орфографических предложений. Это все хорошо работает, но мне любопытно, как я могу улучшить функциональность.

В частности, моя реализация в настоящее время не обрабатывает соединенные слова. Например, я хотел бы иметь возможность обнаружить «areyou» и предложить «вместо тебя». Я думаю, что могу сделать это, разбив потенциально соединенное слово на вероятные сегменты и протестировав обе половины. Поскольку все английские слова должны иметь хотя бы одну гласную, я думаю, что могу искать гласные, которые помогут мне решить, где разбить слова на части.

Алгоритм расстояния Дамерау-Левенштейна был настолько полезен; Понятно, что другие больше думают об этом, чем я. Есть ли такой же умный алгоритм, который я должен рассмотреть для обнаружения соединенных слов, или я уже на правильном пути?

Ответы [ 3 ]

3 голосов
/ 18 ноября 2009

Я полагаю, что объединенное слово кандидата не будет длиннее сорока (40) символов или около того; в большинстве случаев это будет меньше десяти (10).

Учитывая небольшой размер, как насчет этого псевдокода?

if (is_spelled_wrong(word)):
    N = len(word)
    list_suggestions = []
    for i = 1 to N-1:
        wordA = word[0:i] // Pythonic 'slice' notation
        wordB = word[i+1:N]
        if (!is_spelled_wrong(wordA) && !is_spelled_wrong(wordB))
            list_suggestions.appened((wordA, wordB))

Другими словами, просто просмотрите строку для всех возможностей. Их немного. В случае «areyou», вы должны выполнить цикл пять (5) раз.

1 голос
/ 19 ноября 2009

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

1 голос
/ 18 ноября 2009

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

...