簡體   English   中英

將 java.lang.string 轉換為 PYthon 字符串/字典

[英]Converting java.lang.string to PYthon string/dictionary

我正在使用 SUTime 庫來完成與文本相關的任務。 這是使用的原始代碼:

import os
import json
from sutime import SUTime
import ast
import json
if __name__ == '__main__':
    test_case = u'I need a desk for tomorrow from 2pm to 3pm'

    jar_files = os.path.join(os.path.dirname('path to SUTime jar files'), 'jars')
    sutime = SUTime(jars=jar_files, mark_time_ranges=True)
    op=sutime.parse(test_case)
    op1 = op
    op2 = []
    op2 = op1#json.loads(op1)#ast.literal_eval(op1)
    #print(op2)
    json_op = json.dumps(list2)
    print(json_op)

注意:原始庫(sutime.parse)返回 json.loads(self._sutime.annotate(input_str)) 返回此錯誤:

TypeError: the JSON object must be str, bytes or bytearray, not 'java.lang.String'

所以,我修改它,使sutime.parse返回self._sutime.annotate(input_str),返回java.lang.string格式的output,如下:

[{"start":18,"end":26,"text":"tomorrow","type":"DATE","value":"2020-07-28"},{"start":27,"end":42,"text":"from 2pm to 3pm","type":"DURATION","value":{"end":"T15:00","begin":"T14:00"}}]

使用這個 output 進行分析/進一步處理是很棘手的,因為我一直在嘗試對它執行一些操作,比如轉換為 JSON,字符串分配導致錯誤,說它是 Z466DEEC76ECDFA6D38571 操作。無法執行。 有沒有辦法將其轉換為 Python 字符串或 Python 字典。 將其轉換為字典對於我的用例(或在上面提供的示例中的兩個字典)來說是理想的。 我已經嘗試 json.loads 嘗試將此 java.lang.string 轉換為字典列表,但失敗並顯示錯誤消息:

TypeError: the JSON object must be str, bytes or bytearray, not 'java.

我也嘗試過 ast.literal_eval() ,它返回一個錯誤說:

ValueError: malformed node or string: '[{"start":72,"end":80,"text":"December","type":"DATE","value":"2020-12"},{"start":111,"end":119,"text":"November","type":"DATE","value":"2020-11"}]'

所以,在最后的努力中,我試圖通過分配來去掉方括號:

op1[0] = ''

這導致錯誤說:

TypeError: 'java.lang.String' object does not support item assignment

由於 JPype 模塊中的更改,會出現此問題。

您可以修改調用 JVM 的sutime.py的那部分,以提供為向后兼容而包含的附加參數:

        jpype.getDefaultJVMPath(),
        '-Djava.class.path={classpath}'.format(classpath=self._classpath),
        convertStrings=True

或者,您可以通過將 JPype 模塊降級到早期版本(如 0.7.5 版)來重現早期行為 - 例如,通過

pip3 uninstall JPype1
pip3 install "JPype1==0.7.5"

我有確切的問題,我通過將 java.lang.String 轉換為 python 字符串然后將其轉換為 json 來解決它。

首先,將 sutime.py 的最后兩行修改為此

return json.loads(str(self._sutime.annotate(input_str, reference_date)))[0]
    return json.loads(str(self._sutime.annotate(input_str)))[0]

然后在您的主要 class 中,將不帶 dumps() 的 sutime.parse 分配給一個變量

time = sutime.parse(test_case) 

並執行以下檢查方法:

print(type(time))
print(time['value'])

第一次打印將返回 type'dict',第二次打印將返回“2020-06-10”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM