問題タブ [grapheme]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - Swift がこの書記素クラスタを 1 文字ではなく 2 文字としてカウントするのはなぜですか?
一般に、Swift は、書記素クラスターを 1 文字としてカウントすることについて非常にスマートです。たとえば、レバノンの国旗を作りたい場合、2 つの Unicode 文字を組み合わせることができます
- U+1F1F1 地域指標記号文字 L
- U+1F1E7 地域指標記号文字 B
予想どおり、これは Swift の 1 文字です。
ただし、Fitzpatrick Type-5 の自転車の絵文字を作成したいとしましょう。組み合わせたら
- U+1F6B4 自転車乗り
- U+1F3FE 絵文字修飾子 フィッツパトリック TYPE-5
Swift では、この組み合わせを2文字としてカウントします。
なぜこの文字は 1 文字ではなく 2 文字なのですか?
1 であると予想する理由を示すために、このクラスターは実際には有効な絵文字として解釈されることに注意してください。
python - Unicode コード ポイントのリストが与えられた場合、それらを Unicode 文字のリストに分割するにはどうすればよいでしょうか?
Unicode テキストの語彙アナライザーを作成しています。多くの Unicode 文字には複数のコード ポイントが必要です (正規構成の後でも)。たとえば、 にtuple(map(ord, unicodedata.normalize('NFC', 'ā́')))
評価され(257, 769)
ます。2 つの文字の境界がどこにあるかを知るにはどうすればよいですか? さらに、テキストの正規化されていないバージョンを保存したいと思います。私の入力は Unicode であることが保証されています。
これまでのところ、これは私が持っているものです:
これにより、次のように誤って出力されます。
次のように出力されることを期待しています。
regex - 時間の複雑さを軽減してMatlabの文字列から英語の書記素を作成する方法は?
私はMatlabで書記素から音素への変換に取り組んでおり、最初に単語を特定の子音、連字、およびそれらに関連する母音に分割し、入力された各文字列(単語)をその書記素形式に分割するためのより一般化されたコードを作成しようとしています。後で適切な音声合成を生成できます。ただし、多数のルールが存在するため、膨大な負荷の if-elseif-else、各文字のループ、および成長する配列の存在により、時間の複雑さが多様化し、結果が得られません (ビジー状態を示しています)。 、コンソールから文字列入力を入力するたびに)。コードを簡素化するのを手伝っていただければ、以下をご覧ください。
java - Javaで書記素クラスターまたは「認識された」絵文字文字を数える方法
提供されたJava文字列で認識された絵文字の数を数えたいと思っています。現在emoji4jライブラリを使用していますが、次のような書記素クラスタでは機能しません: </p>
の代わりにreturn を呼び出し、同様にの代わりにreturnを呼び出しEmojiUtil.getLength("")
ます。4
1
EmojiUtil.getLength("")
5
2
String
書記素クラスターを簡単にカウントできる Javaの API またはメソッドはありますか?
私は探し回ってきましたが、当然のことながら、上のcodePoints()
方法にはString
、目に見える絵文字だけでなく、ゼロ幅のジョイナーも含まれています。
私もこれを使用して試みましたBreakIterator
:
しかし、メソッドと同じように動作するようで、 のようなものをcodePoints()
返します。8
""
c++ - C++ Unicode: バイト、コード ポイント、書記素
それで、私はスクリプト言語を構築しています。私の目標の 1 つは、便利な文字列操作です。C++でいくつかのアイデアを試しました。
- バイト シーケンスとしての文字列と、コード ポイント インデックスを含むベクトルを返すフリー関数。
- 文字列とインデックスを含むベクトルを結合するラッパー クラス。
どちらのアイデアにも問題があり、その問題は、何を返すべきかということでした。文字にすることはできません。文字列の場合は、スペースが無駄になります。
最終的に、正確に 4 バイトの char 配列のラッパー クラスを作成しました。これは、メモリ内に正確に 4 バイトの文字列で、多かれ少なかれありません。
このクラスを作成した後、別のクラスのクラスにラップして、std::vector
そこからビルドして、文字列型のコードポイントを作成したいという誘惑にかられました。これが良いアプローチかどうかはわかりませんが、最終的にははるかに便利になりますが、より多くのスペースを浪費することになります。
したがって、コードを投稿する前に、より整理されたアイデアのリストを次に示します。
- 私の文字タイプは、バイトでも書記素でもなく、コードポイントです。私はそれを Go 言語のルーンのような名前にしました。
- 一連の分解されたルーンとしての文字列。したがって、インデックス付けとスライス O1 が作成されます。
- ルーンはプリミティブではなくクラスになったため、Unicode の空白を検出するメソッドで拡張できます。
mysring[0].is_whitespace()
- 書記素の扱い方がまだわかりません。
興味深い事実!ルーン クラスのプロトタイプを作成する方法で奇妙な点は、常に UTF8 で出力されることです。私のルーンは int32 ではなく 4 バイトの文字列であるため、これにはいくつかの興味深いプロパティがあります。
私のコード:
エラー処理のアイデア:
C++ で例外を使用するのは好きではありません。私の考えは、コンストラクターが失敗した場合、ルーンを 4 として初期化し'\0'
、ブール演算子を明示的にオーバーロードして、実行の最初のバイトがたまたま'\0'
. シンプルで使いやすい。
それで、考え?意見?異なるアプローチ?
ルーン文字列が多すぎても、少なくともルーンタイプは持っています。小さくて高速にコピーできます。:)
java - Java での書記素検索
だから私は、さまざまな言語で単語を検索するプロジェクトに取り組んでいます。言語のロケールは簡単に取得できますが、別の言語で単語を検索する方法がわかりません。したがって、テキストは中国語で、検索する単語は英語にすることができます。たとえば、php にはgrapheme_striposがあります。Java で同様の機能を探しています。Javaで書記素検索を行うものは見つかりませんでした。したがって、文字列を分解してバイト配列に格納し、それを検索するのも1つの方法かもしれませんが、目的を解決するPHPのgrapheme_striposのようなより良いものはありませんか?