2011-10-28 22 views
4

日本語の文字列(例:「私はマーケットに行きました」)で単語の境界を見つける解決法は、JavaScriptの正規表現(「xregexp」JSライブラリの使用)?Javascript 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の1つがあります:https://github.com/takuyaa/kuromoji.js – katspaugh

答えて

6

しかし、日本語の文章を単語に分割する実際の問題は、たとえば英語のように単語がスペースに分割されないため、表示されるより複雑です。

例えば、文私はマーケットに行きました( "私は市場に行ってきました")は、次の言葉を持っています。

  • 私 - わたくし
  • は - わ
  • マーケット - maaketto
  • に - NI
  • 行きました - ikimashita
  • - 。(ピリオド)

日本語の文章の信頼できるパーサーは、とりわけ、単語(waとni)が残りの単語を見つけるために文中にどこにあるかを見つけなければなりません。

+3

はい、これは本当に難しいことです。あなたは単語の大きな辞書を持っていなければなりません。そして、一連の文字(特に仮名)が使われるときにどんな言葉が意味されそうかを推測するヒューリスティックです。あなたは文章を複数の方法で読むことができる場所で言葉遣いをすることができるので、最終的には仕事は完全には解決できません。また、ツールを使って鈍い正規表現(JavaScriptのUnicode-ignorant regexpsは気にしないでください) – bobince

4

\b\w\Wは、JavaScriptではUnicode対応ではありません。単語の境界を特定の文字セットとして定義する必要があります。 (^|$|[\s.,:\u3002]+)または類似のように。

\u3002は、('。'.charCodeAt(0)).toString(16)である。それは日本語の句読記号ですか?

あるいは、contrario、ワード構成文字のユニコード範囲を定義し、それを否定:

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

例えばカタカナ範囲は、http://www.unicode.org/charts/PDF/U30A0.pdfから採取しました。

+0

私はそう思います。 '。'は句読記号です – Andrei

+1

はい、それは完全な停止であり、単語(文)の境界で分割する信頼できる方法はほとんどありません。それよりもうまくいくことは、(ピーターの答えによると)非常に難しいです。 – bobince

関連する問題