如何在python中检查两个单词的顺序

如何在python中检查两个单词的顺序,python,Python,检查两个单词在句子中的顺序以及在python中出现的次数的最佳方法是什么。 例如:我喜欢吃maki寿司,最好的寿司是在日本。 单词是:[maki,寿司] 谢谢 代码 import re x="I like to eat maki sushi and the best sushi is in Japan" x1 = re.split('\W+',x) l1 = [i for i,m in enumerate(x1) if m == "maki"] l2 = [i for i,m in enume

检查两个单词在句子中的顺序以及在python中出现的次数的最佳方法是什么。 例如:我喜欢吃maki寿司,最好的寿司是在日本。 单词是:[maki,寿司]

谢谢

代码

import re

x="I like to eat maki sushi and the best sushi is in Japan"
x1 = re.split('\W+',x)
l1 = [i for i,m in enumerate(x1) if m == "maki"]
l2 = [i for i,m in enumerate(x1) if m == "sushi"]


ordered = []
for i in l1:
    for j in l2: 
        if j == i+1:
            ordered.append((i,j))

print ordered
如果res>0: 单词在句子中按顺序排列

words = ["sushi", "maki", "xxx"]
sorted_words = sorted(words)
sen = " I like to eat maki sushi and the best sushi is in Japan xxx";
ind = map(lambda x : sen.index(x), sorted_words)
res = reduce(lambda a, b: b-a, ind)
如果res>0: 单词在句子中按顺序排列

words = ["sushi", "maki", "xxx"]
sorted_words = sorted(words)
sen = " I like to eat maki sushi and the best sushi is in Japan xxx";
ind = map(lambda x : sen.index(x), sorted_words)
res = reduce(lambda a, b: b-a, ind)
这不是最有效的方法,但更容易理解

s = 'I like to eat maki sushi and the best sushi is in Japan'
这不是最有效的方法,但更容易理解

s = 'I like to eat maki sushi and the best sushi is in Japan'
支票

如何计算


注(基于以下讨论):

假设这句话是“我更喜欢makim而不是寿司或maki”。意识到makim是maki之外的另一个词,maki这个词放在sushi之后,在句子中只出现一次。要检测到这一点并正确计数,必须将句子按空格分割成实际单词

支票

如何计算


注(基于以下讨论):

假设这句话是“我更喜欢makim而不是寿司或maki”。意识到makim是maki之外的另一个词,maki这个词放在sushi之后,在句子中只出现一次。要检测并正确计数,必须将句子按空格分割成实际单词。

正则表达式解决方案:)

正则表达式解决方案:)


只是我的想法,它可能需要更多的工作

(sentence.index('maki') <= sentence.index('sushi')) == ('maki' <= 'sushi')

(句子索引('maki')只是一个想法,它可能需要更多的工作

(sentence.index('maki') <= sentence.index('sushi')) == ('maki' <= 'sushi')

(句子索引('maki')根据添加的代码,您的意思是单词是相邻的吗

为什么不把它们放在一起:

print len(re.findall(r'\bmaki sushi\b', sent)) 

根据增加的代码,你是说单词是相邻的

为什么不把它们放在一起:

print len(re.findall(r'\bmaki sushi\b', sent)) 


您可以自己提供任何代码尝试吗?添加了,但没有效率,因此您希望“每对索引(x,y)都是x。index
只取第一个瞬间。因此,请考虑“我更喜欢makimore而不是sushi或maki”。maki是放在“sushi”之前还是之后?顺便问一下,.count()也应该放在split之前,谢谢!您的操作s.split()。index(w)。你不需要。是的,你确实需要拆分:假设这个句子是‘我喜欢makimore和maki’。单词‘maki’只出现一次。不使用拆分()会计算两次。索引只需要第一个瞬间。所以想想‘我更喜欢makimore而不是sushi或maki’。‘maki’放在‘sushi’之前还是之后?顺便问一下,.count()也应该在拆分之前,谢谢!%s格式化对于较新的字符串来说不太经得起未来的考验。format()方法%s格式化对于较新的字符串来说不太经得起未来的考验。format()方法no OP的意思是按顺序排列,所以这个答案是无用的。@jakob-thx这实际上解决了我的问题:)(我还允许两个单词之间使用“-”)不,OP的意思是按顺序排列,所以这个答案是无用的。@jakob-thx这实际上解决了我的问题:)(我也在两个单词之间加了“-”,只是为了证明它工作得很好,因为给出的示例应该返回True。断言只是为了表明它没有失败OK。顺便说一句,我喜欢你为它做的功能。但请看我们的讨论:我认为您确实需要拆分句子……这是对
assert
的非常不恰当的使用。只是用一个注释。只是为了证明它可以正常工作,因为给出的示例应该返回True。断言只是为了表明它没有失败OK。顺便说一句,我喜欢你为它做的功能。但请看我们的讨论:我认为您确实需要拆分句子……这是对
assert
的非常不恰当的使用。只需使用注释。
index()
将为您提供最低的索引。如果单词不在字符串中,它还会引发
ValueError
。这只适用于最简单的情况。
index()
将为您提供最低的索引。如果单词不在字符串中,它还会引发
ValueError
。这只适用于最简单的情况。