获取一个句子中的ngram单词的位置

2024-05-29 03:33:54 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,我想得到一个单词在句子中的位置。匹配的字符串可以是几个单词

sentence = "Bloomberg announced today that Gordian Capital will implement the solution to help its clients pursue new fund opportunities faster."

search_str = "Bloomberg" 

预期产出:

0

要匹配的字符串可以由多个单词组成。在这种情况下,我想得到开头的位置

search_str = "Gordian Capital" 

预期产出:

4

搜索可以是特殊字符和数字的组合,例如$5.1 billion。我试过这样的方法,但它把原来的句子分成了几个单词,我不知道如何处理n-gram的情况

result = [i+1 for i,w in enumerate(sentence.split()) if w == search_str]

任何解决方案都将不胜感激。谢谢


Tags: 字符串searchtodaythat情况implement单词will
2条回答
  1. 使用搜索分割句子

result = sentence.split(search_str)

  1. 取结果的第一个元素并用空格分割

result = result[0].split(' ')

看起来已经完成了,只需要用

len(result)

但有时,可能会出现一个空元素

为了避免这种情况,必须对列表进行筛选

result = [elem for elem in filter(lambda x: x!="", result)]

print(len(result))

所有这些你都可以写在一行中:

result = len([elem for elem in filter(lambda x: x != "", sentence.split(search_str)[0].split(" ")) ])

尝试枚举

由于您实际上只是在搜索任何搜索字符串中查找第一个单词的位置,因此我们也可以将其拆分,只需尝试匹配第一个单词即可

这里有一个解决问题的单行线:

search_str = "Gordian Capital"

[k for k, v in enumerate(sentence.split()) if v.lower() == search_str.split()[0].lower()]

结果:

[4]

这是一个有不止一个戈尔迪安大写字母的句子

sentence = "the Bloomberg announced today that Gordian Capital will implement the solution to help Gordian Capital's clients pursue new fund opportunities faster, says Gordian Capital."

[k for k, v in enumerate(sentence.split()) if v.lower() == search_str.split()[0].lower()]

结果:

[5, 13, 22]

注意:由于Python是区分大小写的,为了更好地匹配,我们将术语用小写字母表示

本部分:

search_str.split()[0].lower()

在空白字符上拆分(默认情况下),然后抓取第一个项目并将其重新格式化为小写,以便与目标匹配

相关问题 更多 >

    热门问题