使用Ruby 1.9.1匹配UTF-8编码字符串中的单词

时间:2010-01-12 11:57:48

标签: regex encoding ruby-1.9

我希望匹配给定字符串中的所有单个单词,前提是String是UTF-8编码的,然后我拼写检查每个单词。一切都适用于我的代码,只要它是英文文本,但如果有一些德文字符,我的文字在这些字符上分成两部分。如何匹配包含拉丁字符和非拉丁字符的文本中的单个单词?

我现在所做的是:

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

但是,对于包含“oooäuuu”的文本,最终会出现“replacementäreplacement”,即:德语字符不会被视为单词的一部分。

3 个答案:

答案 0 :(得分:2)

根据Pickaxe的说法,\w字符类与[A-Za-z0-9_]完全相同,显然不会包含重音字符。根据您的语言环境,您可能会发现POSIX类[:alpha:]是您想要的(我认为您将使用/[[:alpha:]']+/,但我可能错误地确定了正则表达式的格式)。

答案 1 :(得分:2)

看起来效果非常好:

/[[:word:]]+/

这太简单了;)

答案 2 :(得分:0)

你需要的是英语|德语| ...标记符?自然语言中的标记化并不像查找空白那么简单。例如,如果你想对这句话进行标记:“洛杉矶是一个美丽的城市”。如果你想在字典中找到它,洛杉矶应该被视为一个单词而不是两个单词。

你还应该处理标点符号(。;?!:),缩写,分隔符,引号,clitic收缩等...

中文或日文等语言的标记化要困难得多。

Jurafsky和Martin在第3.9.1章的“语音和语言处理”中有一个简单的英语标记化perl脚本。