Соответствующие слова в кодированной строке UTF-8 с Ruby 1.9.1 - PullRequest
1 голос
/ 12 января 2010

Я хочу сопоставить все отдельные слова в данной строке, при условии, что строка содержит кодировку UTF-8, а затем я проверяю правописание каждого слова. Все работает с моим кодом, при условии, что это только текст на английском языке, но если есть, скажем, немецкие символы, мои слова разбиваются на две части на этих символах. Как сопоставить отдельные слова из текста, которые содержат латинские и нелатинские символы?

Что я делаю сейчас:

text.gsub(/[\w\']+/) do |word| "replacement" end

но для текста, содержащего "oooäuuu", в конечном итоге будет указано "replaceäreplacement", т. Е. Немецкие символы не рассматриваются как часть слова.

Ответы [ 3 ]

2 голосов
/ 13 января 2010

Похоже, это работает довольно хорошо:

/[[:word:]]+/

Это было слишком просто;)

2 голосов
/ 12 января 2010

Согласно Pickaxe, класс символов \w в точности эквивалентен [A-Za-z0-9_], который, очевидно, не будет включать символы с акцентом. В зависимости от вашей локали, вы можете найти класс POSIX [: alpha:], который вы хотите (я думаю, вы бы использовали /[[:alpha:]']+/, но я могу ошибаться в точном форматировании регулярного выражения).

0 голосов
/ 12 января 2010

Что вам нужно, это английский | немецкий | ... токенизатор? Токенизация на естественном языке не так проста, как поиск пробелов. Например, если вы хотите пометить это предложение: «Лос-Анджелес - красивый город». Лос-Анджелес следует рассматривать как одно слово, а не два, если вы хотите найти его в словаре.

Также вы должны иметь дело с пунктуацией (.;?! :), аббревиатурами, разделителями, цитатами, сокращениями клита и т. Д. ...

Токенизация на таких языках, как китайский или японский, намного сложнее.

В книге «Речь и обработка языка» Джурафски и Мартина из главы 3.9.1 приведен простой Perl-скрипт токенизации английского языка.

...