2010-01-12 50 views
1

UTF-8編碼字符串匹配的話我想匹配所有單個單詞在給定的字符串,只要字符串是UTF-8編碼,然後我拼寫檢查每一個字。一切正常,我的代碼,只要它的英純文本,但如果有一些,比如說,德國的字符,我的話被兩對這些字符分割。我如何匹配文本中包含拉丁字母和非拉丁字符的單個單詞?與1.9.1

我現在要做的是:

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

但這對於含有「oooäuuu」文本將結束與「replacementäreplacement」,即:德語字符不被視爲單詞的一部分。

+0

你能澄清什麼會構成一個字斷?你是否期待「簿記員」分成「書」和「守護者」? – Chowlett 2010-01-12 12:03:15

回答

2

根據Pickaxe的說法,\w字符類與[A-Za-z0-9_]完全相同,這顯然不包含重音字符。根據您所在地區,你會發現POSIX類[:阿爾法:]是你想要的東西(我想你會用/[[:alpha:]']+/,但我可能是錯的正則表達式的確切的格式存在)。

+0

看起來不錯;雖然你不需要逃避撇號。 – 2010-01-12 13:56:04

+0

D'哦,我當然不知道。感謝您的理智檢查。 – Chowlett 2010-01-12 13:58:52

0

你需要的是一個英語|德語| ...標記生成器?自然語言的標記化並不像尋找空白那麼簡單。例如,如果你想標記這句話:「洛杉磯是一個美麗的城市」。如果你想在字典中找到它,洛杉磯應該被視爲一個不是兩個字。你

還應處理與標點符號(;?!:),縮寫,分離器,行情,附着詞素收縮,等...

符號化在像中國或日本的語言是有很多困難。

有沒有在「演講和語言處理」一章3.9.1一個簡單的英文標記化的perl腳本由Jurafsky和馬丁。

2

看來,這工作得很好:

/[[:word:]]+/ 

那是太容易;)