Python 基于关键字列表拆分文本

Python 基于关键字列表拆分文本,python,list,dictionary,split,Python,List,Dictionary,Split,我正在与一个项目合作,将从Google speech接收到的原始文本转换为文本API,转换为结构化数据,如下所示: “标题新冠病毒-19试验2.假设。疫苗仍然有效。观察。要点。辉瑞98%有效。要点。摩德纳97%有效。” 其结果与此类似: 新冠病毒-19试验2 假设 疫苗仍然有效 观察: 辉瑞98%有效 摩德纳有97%的疗效 我有硬编码函数来查找关键词,如标题、假设、观察值,然后根据名称应用特定函数 result.alternatives[0].transcript = 'Heading.Co

我正在与一个项目合作,将从Google speech接收到的原始文本转换为文本API,转换为结构化数据,如下所示:

“标题新冠病毒-19试验2.假设。疫苗仍然有效。观察。要点。辉瑞98%有效。要点。摩德纳97%有效。”

其结果与此类似:

新冠病毒-19试验2 假设 疫苗仍然有效

观察:
  • 辉瑞98%有效
  • 摩德纳有97%的疗效
我有硬编码函数来查找关键词,如标题、假设、观察值,然后根据名称应用特定函数

result.alternatives[0].transcript = 'Heading.Covid Test 2.Hypothesis.Vaccine still works.'

keyword_list = ['heading', 'hypothesis'] 
Text_List = result.alternatives[0].transcript.split('.')
Text_List = [x.lower() for x in Text_List]
文本列表类似于此
[“标题”,“新冠病毒检测2”,“假设”,“疫苗仍然有效”]

然后我将关键字与下一个文本配对,并将它们添加到字典中

dictionary = {}
for k in keyword_list:
    if(k in Text_List):
        dictionary[k] = Text_List[Text_List.index(k) + 1]
字典看起来像这样=
{'heading':'covid test 2','假设':'疫苗仍然有效'}

然后发送到一个函数,该函数根据键值添加标记

这适用于将下一行作为输入的关键字。 在处理观察结果时会出现问题

观察结果。指向辉瑞的有效率为98%。指向Moderna的有效率为97%。

如果我们使用
Split('.')
拆分上述文本。 我们得到的结果类似于
[“观察结果”,“积分”,“辉瑞98%有效”,“积分”,“摩德纳97%有效]

当上面给出的用于制作字典的in-out函数给我们提供了
{'heading':'covid test 2','假说':'vaccine still works','observations':'point'}
,因为我们在周期(.)

所以我想知道是否有一种方法可以根据我们列表中的关键字来分割文本? 例如

“标题新冠病毒-19试验2.假设。疫苗仍然有效。观察。要点。辉瑞98%有效。要点。摩德纳97%有效。保存”

它在
关键字列表=[“标题”、“假设”、“观察结果”、“保存”]


给我们一些类似的信息,比如:{code>{'heading':'covid test 2','假设':'疫苗仍然有效','观察':'点.辉瑞98%有效.点.摩德纳97%有效','save':'}

这是我第一次在这里回答,但这是我的看法。您可以尝试使用find函数解析它们,该函数返回短语的索引,根据单词长度进行调整,然后根据字符串中出现的关键字的索引对它们进行分区。当然,只有当所有短语的关键字顺序与您指定的相同时,这种方法才能很好地工作,但是如果您想按关键字进行分割,我认为这是一种不错的方法

test = 'Heading.Covid Test 2.Hypothesis.Vaccine still works.Observations. Point. Pfizer is 98% effective. Point. Moderna is 97% effective.'
keys = ['Heading','Hypothesis','Observations']

indx = []

for i in range(len(keys)):
    if test.find(keys[i])!= -1:
        indx.append(int(test.find(keys[i])))
    else:
        #you may have to do some processing here if keys is not found
        print('Key not found')

dic = {}
for i in range(len(keys)):
    if i != len(keys)-1:
        dic[keys[i]] = test[(indx[i]+len(keys[i])):indx[i+1]]
    elif i == len(keys)-1:
        dic[keys[i]] = test[indx[i]+len(keys[i]):]

print(dic)

像这样的方法应该会奏效:

keyword_list = ['heading', 'hypothesis', 'observations', 'save']
input_text = "Heading COVID-19 Test 2. Hypothesis. The vaccine still works. Observations. Point. Pfizer is 98 effective. Point. Moderna is 97 effective. Save"
lc_input = input_text.lower()
indices = [lc_input.find(word) for word in keyword_list]
for i in range(len(indices)):
    try:
        # append to a list or a dict
        print (lc_input[indices[i]:indices[i+1]])
    except:
        # this applies to the last iteration
        print (lc_input[indices[i]:len(lc_input)])