2016-09-22 4 views
0

私は、文字列の先頭から、Pythonのスティングから位置名が始まるUTF-16コードユニットの数を抽出する必要があります。私はPolyglot NERを使用して、Python文字列の場所にタグを付けます。たとえば、「オバマはアメリカで生まれましたが、私はアラバマ州で生まれました」と、「アメリカ」と「アラバマ」をマークします。 Python Polyglotエクストラクタは、タグ付けされた場所に戻るだけでなく、先頭からいくつの単語が始まるかを返します。単語が出現する文字列の先頭からUTF-16コードユニットの数を調べるにはどうすればよいですか?情報https://github.com/Berico-Technologies/CLAVIN/blob/master/src/main/java/com/bericotech/clavin/extractor/LocationOccurrence.javaPythonでのUTF-16コードユニットPolyglot

+2

あなたが最初にそれを解読することはできません。それがすべてだ場合、あなたはstrのオブジェクトの.INDEX()メソッドを使用することができます必要がありますか? –

+0

私はテキストを使って作業しています。私は正直なところ、距離としてコード単位を使用している方法、またはその距離を取得する方法を理解できません。 –

+0

エンコーディングを気にする必要がある場合、テキストではなくバイトで作業しています。 –

答えて

0

を必要

Javaインタフェースは、ジャスト@Ignacioバスケス - エイブラムスのコメントのいくつかを明確にします。 テキストを処理したり分析したりするとき、与えられた文字が何バイトかを気にする必要はありません。そのため、コード化されたテキストを最初に 'デコード'して別のtext/str表現にすることで、 'encoding'を式の外に出すのはこのためです。

>>> encoded_text = 'hello world'.encode('utf16') 
>>> encoded_text 
b'\xff\xfeh\x00e\x00l\x00l\x00o\x00 \x00w\x00o\x00r\x00l\x00d\x00' 
>>> type(encoded_text) 
<class 'bytes'> 
>>> len(encoded_text) 
24 


>>> decoded_text = encoded_text.decode('utf16') 
>>> decoded_text 
'hello world' 
>>> type(decoded_text) 
<class 'str'> 
>>> 
>>> len(decoded_text) 
11 

私はあなたが最初からのバイト数を取得するには、このような何かを行うことができますあなたが投稿JavaコードでUTF-16 code units ...

を見ました:

sentence = "Obama was born in the United States. But I was born in Alabama".encode('UTF-16LE') 
word = 'United States'.encode('UTF-16LE') 

bytes_from_start = None 
for start_byte_position in range(len(sentence)): 
    candidate = sentence[start_byte_position: start_byte_position + len(word)] 
    if word == candidate: 
     bytes_from_start = len(sentence[:start_byte_position]) 
     print('bytes from start: ', bytes_from_start) 
     print('len(sentence[:start_byte_position]): ', len(sentence[:start_byte_position])) 
     print('Preceding text: "{}"'.format(sentence[:start_byte_position].decode('UTF-16LE'))) 
     break 

しかし、それはですUTF-16コードユニット == バイトの場合はまだクリアされていません。私はそれが本当にちょうど最初から文字数を望んでいると感じています。あなたが代わりにテキストで作業しているように、

sentence = "Obama was born in the United States. But I was born in Alabama" 
word = 'United States' 
characters_from_start = sentence.index(word) 
+0

インターフェイスの要件はUTF-16コード単位です。したがって、「エンコーディング」は、文字が占めるバイト数が重要です。 –

+0

ええ、私は気づいた、更新された答え... – monkut

関連する問題