1

この質問の「トリッキーな」部分は、アルファベットが意味するのは26文字だけではないということです。また、アクセント付きの文字やヘブライ語のアリベスなど、アルファベットのようなものも含める必要があります。

なぜそれらが必要なのですか?

テキストを単語に分割したい。

ラテン アルファベット、ヘブライ語のアリベス、アラブ アブジャッドなどのアルファベットは、スペースで区切ります。

漢字は何も区切られていません。

ですから、テキストはアルファベット以外のもので区切る必要があると思います。

つまり、a、b、c、d、é は問題ありません。

駅,南,口,第,自,転,車.,3,5,6 ではなく、そのような区切り文字はすべて独自の単語にする必要があります。またはそのようなもの。

要するに、文字がそれ自体で単語であるか、単語の一部であるかを検出したいと考えています。

私は何を試しましたか?

ここで私がずっと前に尋ねた質問を確認できます: 文字の一部が中国語の場合、utf-8 文字を単語に分割するにはどうすればよいですか?

そこに唯一の答えを実装しましたが、漢字が分割されていないことがわかりました。何もないに基づいて分割してみませんか?まあ、それはアルファベットも分割されていることを意味します。

これらすべてのアルファベットが「固着」して、UTFに基づいてそれらを分離できる場合、それも問題ありません。

一部の文字が中国語の場合、どのように utf-8 文字を単語に分割できますか?の回答を使用します。 アルファベット以外のすべての文字を「引き出し」ます。

完璧な解決策ではありませんが、西洋の文字と漢字が同じテキストに表示されることはめったにないので、私にとっては十分です.

4

2 に答える 2

1

Jan Goyvaerts (PowerGrep で有名) はかつて、これを行うための非常に便利な構文を教えてくれました。

(?<![\p{M}\p{L}])word(?![\p{M}\p{L}])

この式は、正規表現の後読みと正規表現の先読みを使用して、単語の境界がどちらの側にも文字または分音記号がないことを確認します。

この正規表現が単に「\b」を使用するよりも優れているのはなぜですか? この正規表現の強みは、分音符号を含めるために \p{M} が組み込まれていることです。通常の単語境界マーカー (\b) を使用すると、発音区別記号が実際には単語の一部であっても、正規表現エンジンは多くの分音記号の場所で単語の区切りを見つけます (たとえば、ヘブライ語の分音記号の場合がこれに該当します)。例として、ヘブライ語の単語 גگڑבוڼچ を取り、「\b.」の正規表現を実行します - それぞれの分音点で単語が実際に単語の異なる部分にどのように分割されるかがわかります)。上記の正規表現は、Unicode 文字クラスを使用して、分音記号が常に単語の一部と見なされ、単語内で区切られないようにすることで、これを修正します。

于 2012-10-12T09:21:54.503 に答える
1

おそらく、これを正規表現ではなく、古き良き文字列インデックス スキャンで行うべきです。

ヘブライ語、中国語、韓国語などのアルファベットはすべて、Unicode コードポイントの連続した範囲にあります。そのため、文字の Unicode 値を読み取り、それが属する Unicode ブロックを確認することで、アルファベットを簡単に検出できます。

于 2012-10-08T10:47:34.550 に答える