2016-09-22 5 views
0

위치 이름이 파이썬 스팅에서 시작하는 문자열의 시작 부분에서 UTF-16 코드 단위의 수를 추출해야합니다. 파이 글 (Python) 문자열에서 위치를 태그하기 위해 폴리 글 (Polyglot) NER를 사용하고 있습니다. 예를 들어, "오바마는 미국에서 태어 났지만, 나는 앨라배마에서 태어났다."는 "미국"과 "앨라배마"라고 표시했다. Python Polyglot 추출기는 태그가 붙은 위치로 돌아가고, 앞으로 몇 단어 씩 시작합니다. 단어가 시작되는 문자열의 시작부터 UTF-16 코드 단위의 수를 어떻게 계산합니까? 정보 https://github.com/Berico-Technologies/CLAVIN/blob/master/src/main/java/com/bericotech/clavin/extractor/LocationOccurrence.javaPython Polyglot에서 UTF-16 코드 단위

+2

당신은 먼저 디코딩 할 수 있습니다 그게 다야 있다면 당신은 STR 객체의있는 .index() 메서드를 사용하여 필요하십니까? –

+0

나는 텍스트 작업을하고있다. 코드 단위를 거리로 사용하는 방법이나 그 거리를 얻는 방법을 정직하게 알 수 없습니다. –

+0

인코딩에 신경 쓸 필요가 있다면 바이트가 아닌 텍스트로 작업 할 것입니다. –

답변

0

을 필요로

자바 인터페이스는 그냥 @Ignacio 바스케스 - 아브람의 의견의 일부를 명확히한다. 텍스트를 처리하거나 분석 할 때 주어진 문자가 차지하는 바이트 수에 대해 걱정할 필요가 없습니다. 그래서 인코딩 된 텍스트를 먼저 별도의 text/str 표현으로 '디코딩'하여 방정식에서 '인코딩'을 제거하는 것입니다.

>>> 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 
난 당신이 게시 된 자바 코드에서 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