在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()
拆分空白字符(默认情况下(,然后获取第一个项目,并将其重新格式化为小写,以便匹配目标。
- 使用search_str拆分句子
result=句子拆分(search_str(
- 取结果的第一个元素并用空格分隔
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(" ")) ])