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



在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

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

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

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

尝试枚举。

由于你只想在任何搜索字符串中查找第一个单词的位置,我们也可以将其拆分,只需尝试匹配第一个单词。

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

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()

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

  1. 使用search_str拆分句子

result=句子拆分(search_str(

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

result=result[0]。split(''(

看起来已经完成了,只需要用计算结果列表中的元素

len(结果(

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

为了避免这种情况,列表必须经过过滤

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

打印(len(结果((

所有这些你只需写一行:

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

最新更新