【发布时间】:2021-04-06 14:02:45
【问题描述】:
我有一个带有两个标记 <e1> 和 </e1> 的句子。我需要这两个标记之间的单词序列位置的索引。请注意, , 和其他可能的字符都被计算在内!
sent="Hi please help me to <e1>solve, this problem please</e1> Thank you."
我需要什么(期望的输出):
[5, 6, 7, 8, 9]
如果从句首开始计算每个单词,我需要两个标记之间的序列索引:
solve -> 5
, -> 6
this -> 7
problem -> 8
please -> 9
我尝试了这两种解决方案:
解决方案 1:
sent="Hi please help me to <e1>solve, this problem please</e1> Thank you." E1 = re.search('<e1>(.*)</e1>', sent).group(1) sent = sent.replace('<e1>', '') sent = sent.replace('</e1>', '') sent = word_tokenize(sent) E1_indx = [] E1_lis = word_tokenize(E1) print(E1_lis) for item in E1_lis: E1_indx.append(sent.index(item)) print(E1_indx)
但是输出是:
[5, 6, 7, 8, 1]
解决方案 2:
sent="Hi please help me to <e1>solve, this problem please</e1> Thank you."
e1_st = re.findall(r'<e1>\w+', sent)
e1_end = re.findall(r'\w+</e1>', sent)
e1_st=(''.join(str(x) for x in e1_st))
e1_end=(''.join(str(x) for x in e1_end))
e1_st = e1_st.replace('<e1>', '')
e1_end = e1_end.replace('</e1>', '')
sent = sent.replace('<e1>', '')
sent = sent.replace('</e1>', '')
sent = word_tokenize(sent)
print(list(range(sent.index(e1_st), sent.index(e1_end)+1)))
输出:
[]
当它之前有一个重复的序列词(这里是“请”)时,就会出现问题。
有什么直接的解决办法吗?
【问题讨论】:
-
您好! “单词序列的位置”是什么意思?
-
嗨,我在问题中添加了更多信息!
标签: regex string text nlp tokenize