漢字のみ抽出

漢字のみ抽出

イタリア語と中国語で書かれたテキストで作業していますAWK。どうすればいいですか?

私は試した:

4E00 thru 9FFF (344 270 200 thru 351 277 277)[テストに必要な中国語のUnicode文字範囲>"\343" and <"\352"(4文字UTF-8コードの選択を防ぐため)]:

{
f=0;
for ( i=1; i<=length; i++)
if(substr($0, i, 1)>"\343" &&substr($0, i, 1)<"\352")
f = 1 

print $f
}

しかし、エラー以上があります。見つかりません。

ベストアンサー1

問題は、UTF-8文字ストリームの生のバイトをフィルタリングすると、UTF-8ファイルからUnicodeシーケンスの一部を食べ​​ることになり、無効なバイトシーケンスが発生することです。それは動作しません。代わりに、UTF-8を理解し(ネイティブバイトではなく)Unicodeデータにフィルタを適用するツールを使用する必要があります。

awkどの実装を使用しているかわからないので、Unicodeをサポートしているかどうかはわかりません。しかし、私はPerlが完全にUnicodeで安全であることを知っているので、次のPerlの1行コードが機能するはずです。

perl -CS -p -e 's/[^\s\p{Han}]//g'

\s私はあなたが見たいと思うと仮定します。この\p{Han}ビットは、Unicodeで宣言された文字が漢字(つまり漢字)に使用されるものと一致させたいことをPerlに伝えます。その範囲に含まれていない句読点が必要かどうかわかりません。その場合、句読点も追加する必要があります。

次に、範囲を前の範囲に否定し、最後にグローバル置換コマンド^s///g)でそれをエンコードして、Perlに最初のスラッシュの後の部分インスタンス(否定された範囲または「この範囲にないすべての項目」)を次に置き換えるように指示します。 。 2番目と3番目の前の部分(つまりなし)。

複数の範囲を含める必要がない場合は、[^]構成を中断して同じ一致反転を実行する\Pnot使用に切り替えることができます。\p

残りは、私たちが入力した文字範囲(漢字のUnicode文字とスペース)です。

詳細については、次を参照してください。perldoc perlrePerlが正規表現を処理する方法の説明perldoc perluniprops\p{}可能なUnicode属性(または構文に配置できるビット)のリスト\P{}

おすすめ記事