1

Solr のWordDelimiterFilterに似たものに取り組んでいますが、Java ではありません。

次のように単語をトークンに分割したい:

P90X                 = P, 90, X (split on word/number boundary)

TotallyCromulentWord = Totally, Cromulent, Word (split on lowercase/uppercase boundary)

TransAM              = Trans, AM

上記の例に固​​有のものではなく、一般的な解決策を探しています。できれば、後読みをサポートしていない正規表現のフレーバーですが、必要に応じて、後読みを実行できる PL/perl を使用できます。

SOでいくつかの回答が見つかりましたが、それらはすべて後読みを使用しているようです。

分割するもの:

  1. 小文字から大文字への変換
  2. 文字から数字へ、または数字から文字への移行
  3. (オプション) 他のいくつかの文字に分割 (- _)

一番気になるのは1と2です。

4

2 に答える 2

0

この正規表現は、段落または文字列内のすべての単語をトークンに分割する必要があります。
あなたの例の単純なケースでも機能します。

グローバルに一致します。また、同様に実行できる他の特定の区切り文字を追加したい場合。

   # /(?:[A-Z]?[a-z]+(?=[A-Z\d]|[^a-zA-Z\d]|$)|[A-Z]+(?=[a-z\d]|[^a-zA-Z\d]|$)|\d+(?=[a-zA-Z]|[^a-zA-Z\d]|$))[^a-zA-Z\d]*|[^a-zA-Z\d]+/

   (?:
        [A-Z]? [a-z]+ 
        (?= [A-Z\d] | [^a-zA-Z\d] | $ )
     |  
        [A-Z]+ 
        (?= [a-z\d] | [^a-zA-Z\d] | $ )
     |  
        \d+ 
        (?= [a-zA-Z] | [^a-zA-Z\d] | $ )
   )
   [^a-zA-Z\d]* 
|  
   [^a-zA-Z\d]+ 
于 2014-08-22T19:04:04.343 に答える