2011-08-09 35 views
0

我知道我可以通過使用A-Za-z0-9正則表達式來提取英文字母和數字。正則表達式來提取其他語言的文字

如何從其他語言(如阿拉伯語)中提取單詞,並且只允許其腳本中的字母和數字以及其他任何內容?

我使用的一種方式是過濾掉我不想從文本中得到的所有內容,然後用剩下的正確詞語來處理,但這種方法需要大量CPU時間,並且在大規模應用程序上效率不高。

現在我想知道還有哪些方法在使用或有人知道可以用來分析其他語言的文本。

如何從中文,日文等語言中提取單詞,甚至不用單詞之間的空格?我用來區分單詞的一種方法是將樣式和換行符視爲一種方法,以認識到它們必須是不同的作品,但是當人們不使用大量換行符或格式化來區分不同的作品時,此方法可能不可靠話。

所以,總結一下,如何能其他語言可以使用正則表達式分析?

回答

1

在一般情況下,正則表達式是不夠強大在不使用單詞分隔符(如空格)的語言來提取的話。

爲了從中文中提取單詞,需要一個已知單詞的巨大字典,並且根據已知單詞劃分一個句子,偏向於更長的字典條目(因爲每個單詞本身都是有效的單詞)。

爲了從日本的話,它取決於文風。如果文本完全是假名,則使用上述字典方法。如果文本是漢字和假名的標準混合,那麼你至少可以知道,每一個假名到漢字的過渡幾乎肯定是一個新單詞的開始。

+0

哈哈,這就是現在我博格爾斯因爲我不知道該採取什麼樣的方法,因爲我找不到任何可以中國話字典。也許你可以幫我一些鏈接。 – Vish

+0

谷歌搜索免費的中文字典文件給出了這個:http://www.mdbg.net/chindict/chindict.php?page=cedict。我會就如何分隔中文單詞添加另一個答案。 – Nayuki

0

如果您只是想按字符過濾而不是某種高階語言結構,那麼您可以對大多數語言做同樣的事情 - 您只需要一個支持Unicode的正則表達式庫。你可以找到一個列表here並根據這些範圍進行過濾。

0

正如[A-Za-z0-9]可以使用用於英文文本(大約),因此[\p{Script=Arabic}0-9]可用於阿拉伯語文本(大致)。

1

假設我們手頭中國的字典,我們要分割這樣的一句話:中國是位於亞洲東部的一個廣大地域或國度

一種方法是從左側進行掃描,並抓住儘可能多的字母儘可能在字典中仍然有一個詞。然後,我們通過許多字母前進並重復。這種方法稱爲貪婪方法,會給我們的那句這個分裂:[中國] [是] [位於] [亞洲] [東部] [的] [一] [個] [廣大] [地域] [或] [國度]

這並不是唯一的方法,因爲有時最好分裂不剩貪婪。例如,如果我們有字典{A,B,C,d,AB,BCD}和文本ABCD,那麼我們可以分割文本作爲[AB] [C] [d]或[A] [BCD] 。後者可能比前者更受歡迎。

方便的是,這個網頁可以證明在實踐中,分詞:http://www.mdbg.net/chindict/chindict.php

+0

我也不會感到驚訝,如果有中文雙關語,其中包含將多個較短的單詞放在一個更長的單詞中,因此沒有一個正確的解析。 – porges

+0

儘管我的示例短語顯示的是單字和雙字,但在更多技術或特定情況下可能會找到更長的單詞。對於文學作品來說,有大量的4個字符的成語。就技術而言,有些東西如碳水化合物=碳水化合物。 – Nayuki