我希望匹配给定字符串中的所有单个单词,前提是String是UTF-8编码的,然后我拼写检查每个单词。一切都适用于我的代码,只要它是英文文本,但如果有一些德文字符,我的文字在这些字符上分成两部分。如何匹配包含拉丁字符和非拉丁字符的文本中的单个单词?
我现在所做的是:
text.gsub(/[\w\']+/) do |word| "replacement" end
但是,对于包含“oooäuuu”的文本,最终会出现“replacementäreplacement”,即:德语字符不会被视为单词的一部分。
答案 0 :(得分:2)
根据Pickaxe的说法,\w
字符类与[A-Za-z0-9_]
完全相同,显然不会包含重音字符。根据您的语言环境,您可能会发现POSIX类[:alpha:]是您想要的(我认为您将使用/[[:alpha:]']+/
,但我可能错误地确定了正则表达式的格式)。
答案 1 :(得分:2)
看起来效果非常好:
/[[:word:]]+/
这太简单了;)
答案 2 :(得分:0)
你需要的是英语|德语| ...标记符?自然语言中的标记化并不像查找空白那么简单。例如,如果你想对这句话进行标记:“洛杉矶是一个美丽的城市”。如果你想在字典中找到它,洛杉矶应该被视为一个单词而不是两个单词。
你还应该处理标点符号(。;?!:),缩写,分隔符,引号,clitic收缩等...
中文或日文等语言的标记化要困难得多。
Jurafsky和Martin在第3.9.1章的“语音和语言处理”中有一个简单的英语标记化perl脚本。