【问题标题】:Finding position of a sequence of words (strings) in a sentence在句子中查找单词序列(字符串)的位置
【发布时间】: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


【解决方案1】:

看起来像this 问题。

如果您按以下方式计算偏移量并删除标记,您应该会得到预期的结果。

sub_b = sent.find('<e1>')
sent = sent.replace('<e1>')
sub_e = sent.find('</e1>')
sent = sent.replace('</e1>')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多