protobuf에서 결과를 출력하고 싶습니다. (크기가 훨씬 작으므로) 결과를 파이썬으로 다시 읽으 려합니다. 어떻게해야합니까?Protobuf Python에서 StanfordNLP 출력의 직렬화
java -cp "stanford-corenlp-full-2015-12-09/*" \
edu.stanford.nlp.pipeline.StanfordCoreNLP \
-annotators tokenize,ssplit \
-file input.txt \
-outputFormat serialized \
-outputSerializer \
edu.stanford.nlp.pipeline.ProtobufAnnotationSerializer
다음이 추천 파이썬 모듈로 StanfordNLP의 소스 코드와 함께 제공되는 CoreNLP.proto
, 컴파일 protoc
을 사용
는 I는 출력 명령 here 이런 ProtobufAnnotationSerializer
직렬화 결과를 따랐다
protoc --python_out=. CoreNLP.proto
그런 다음 파이썬에서 나는 다음과 같은 파일을 다시 읽어 :
import CoreNLP_pb2
doc = CoreNLP_pb2.Document()
doc.ParseFromString(open('input.txt.ser.gz', 'rb').read())
구문 분석은 다음과 같은 오류 메시지와 함께 실패
---------------------------------------------------------------------------
DecodeError Traceback (most recent call last)
<ipython-input-213-d8eaeb9c2048> in <module>()
1 doc = CoreNLP_pb2.Document()
----> 2 doc.ParseFromString(open('imed/s5_tokenized/conv-00000.ser.gz', 'rb').read())
/usr/local/lib/python2.7/dist-packages/google/protobuf/message.pyc in ParseFromString(self, serialized)
183 """
184 self.Clear()
--> 185 self.MergeFromString(serialized)
186
187 def SerializeToString(self):
/usr/local/lib/python2.7/dist-packages/google/protobuf/internal/python_message.pyc in MergeFromString(self, serialized)
1092 # The only reason _InternalParse would return early is if it
1093 # encountered an end-group tag.
-> 1094 raise message_mod.DecodeError('Unexpected end-group tag.')
1095 except (IndexError, TypeError):
1096 # Now ord(buf[p:p+1]) == ord('') gets TypeError.
DecodeError: Unexpected end-group tag.
UPDATE :
내가 시리얼 가버 안젤리의 저자를 요구하고 대답을 얻었다. protobuf 개체는 writeDelimitedTo
인 파일에 this line으로 기록되었습니다. writeTo
으로 변경하면 출력 파일을 Python으로 읽을 수 있습니다.
실행중인 protoc의 버전은 무엇입니까? 'protoc --version' – sberry
@sberry : "libprotoc 3.0.0"을 출력합니다. – shaoyl85
그게 문제 일 수도 있습니다. (.java 파일을 생성하는 데 사용 된 버전이 무엇인지는 모르겠지만) 문제가 너무 많아서 제 대답을 먼저보십시오. – sberry