2011-10-28 285 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