2011-10-28 210 views
4

搜索單詞邊界JavaScript正則表達式是否有解決方案,找到在日本串字邊界(例如:「私はマーケットに行きました」)通過JavaScript正則表達式(「xregexp」 JS庫出租車使用)?爲Unicode字符串

例如爲:

var xr = RegExp("\\bst","g"); 
xr.test("The string") // --> true 

我需要日本字符串相同的邏輯。

+0

我不明白,'\\ bst'是什麼? – hippietrail

+0

一種匹配漢,平假名和片假名之間邊界的方法將有助於但不能單獨解決這個問題。到目前爲止,我甚至找不到匹配這些的方法,即使使用xregexp。你可能對我剛剛問到的問題感興趣:http://stackoverflow.com/questions/16492933/regular-expression-to-match-boundary-between-different-unicode-scripts – hippietrail

+0

對於日本人來說,最好是使用完整的形態分析儀。這裏是JavaScript中的一個:https://github.com/takuyaa/kuromoji.js – katspaugh

回答

6

然而,將日語句子分隔成單詞的實際問題比看起來更爲複雜,因爲單詞並不像空格那樣分隔爲空格,例如英語。

例如,句子私はマーケットに行きました( 「我去市場」)具有如下的話:

  • 私 - watakushi
  • は - 華
  • マーケット - maaketto
  • に - NI
  • 行きました - ikimashita
  • - 。(句號)

日語句子的可靠的解析器會,除其他事項外,必須找到其中顆粒(WA和Ni)位於句子,以便找到剩餘的詞。

+3

是的,這真的很難;你必須有大的詞典和啓發式的猜測,當使用一系列字符(特別是假名)時,更可能是什麼詞語。有可能讓雙關語可以以多種方式閱讀一個句子,所以最終這個任務不是完全可以解決的,而且你可以使用像正則表達式那樣的工具來做很少的事情(不必介意JavaScript的Unicode無知的正則表達式)。 – bobince

4

\b以及\w\W在JavaScript中不支持Unicode。您必須將您的單詞邊界定義爲特定的字符集。像(^|$|[\s.,:\u3002]+)或類似的。

\u3002('。'.charCodeAt(0)).toString(16)。這是日語中的標點符號嗎?

或者,一種反證,定義的字構成字母一個Unicode範圍和否定它所:從http://www.unicode.org/charts/PDF/U30A0.pdf採取

var boundaries = /(^|$|\s+|[^\u30A0–\u30FA]+)/g; 

示例片假名範圍。

+0

我想是的。 '。'是標點符號 – Andrei

+1

是的,它是一種句號,是在單詞(句子)邊界處分裂的少數可靠方式之一。做得比這更好是非常困難的(根據彼得的回答)。 – bobince