def _apply_knp(self, sent: str) -> str: self.logger.info(f'parse sentence: {sent}') knp = KNP(command=self.knp, jumancommand=self.juman, option=self.knp_dpnd_option) knp_result = knp.parse(sent) if self.remote_knp is True: _, jumanpp_conll_out = self._apply_jumanpp(sent) clientsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.logger.info(f'connect to {self.knp_host}:{self.knp_port}') clientsock.connect((self.knp_host, self.knp_port)) clientsock.sendall(jumanpp_conll_out.encode('utf-8')) buf = [] while True: data = clientsock.recv(8192) data_utf8 = data.decode('utf-8') buf.append(data_utf8) if data_utf8.endswith('EOS\n'): break clientsock.close() conllu_out = ''.join(buf) self.logger.info(f'received {len(conllu_out)} chars from remote KNP') # modify KNP result by conllu result of remote KNP head_ids, dpnd_types = self._read_conllu_from_buf(conllu_out) self._modify_knp(knp_result, head_ids, dpnd_types) # add predicate-argument structures by KNP knp = KNP(command=self.knp, jumancommand=self.juman, option=self.knp_case_option) knp_result_new = knp.parse_juman_result(knp_result.spec()) return knp_result_new.spec()