确定Python中字符串中的单词列表是否有序?
我想编写一个python函数来确定字符串中是否存在按顺序排列的单词列表。如果没有,则返回该字符串中按顺序排列的最长单词列表 例如,让我们假设我有这样一句话:确定Python中字符串中的单词列表是否有序?,python,nlp,Python,Nlp,我想编写一个python函数来确定字符串中是否存在按顺序排列的单词列表。如果没有,则返回该字符串中按顺序排列的最长单词列表 例如,让我们假设我有这样一句话:那个男孩在街上遛他的大狗。我有一个单词列表[boy,was,his,dog,street,The,down]。很明显,在这个例子中,男孩,was和狗,street,down都在句子中连续出现。因此,我的函数应该按出现的顺序返回这些单词,因此:男孩是和狗在街上 有没有人知道如何有效地做到这一点 谢谢 根据评论编辑: 您只需要按顺序返回字符串中出
那个男孩在街上遛他的大狗。
我有一个单词列表[boy,was,his,dog,street,The,down]
。很明显,在这个例子中,男孩,was
和狗,street,down
都在句子中连续出现。因此,我的函数应该按出现的顺序返回这些单词,因此:男孩是和狗在街上
有没有人知道如何有效地做到这一点
谢谢
根据评论编辑:
您只需要按顺序返回字符串中出现的单词集,这些单词集也在列表中。当然,它们应该尽可能长。这就是为什么在示例中,我返回了dog down the street
,因为所有这些单词都在我的列表中,并且在字符串中彼此相邻出现。我想出了如何做:
def order(sentence, wordList):
s_list = sentence(' .', '').replace('. ', '').replace('.', '').split(' ')
returnSentence = ""
returnSentenceLen = 0
previousPos = 0
currentSentence = []
# iterate through all the words in the matched list and find the ones that are together
for i, word in enumerate(s_list):
# this word is in our list of words
if word in wordList:
currentSentence.append(word)
if i == 0:
previousPos = 0
else:
if (i - previousPos) == 1:
# this should now be our new sentence of continuous words
if (len(currentSentence) > returnSentenceLen):
returnSentence = ' '.join(word for word in currentSentence)
returnSentenceLen = len(currentSentence)
else:
currentSentence = []
currentSentence.append(word)
previousPos = i
return returnSentence
print(order('The boy was walking his dog down the street.', ['boy', 'was', 'dog', 'street', 'the', 'down']))
你的问题陈述没有明确说明;例如,在某些情况下,不清楚应该返回几个候选解决方案中的哪一个。我们需要一个精确的问题说明。@user2357112您只需要按顺序返回字符串中出现的单词集,这些单词集也在列表中。当然,它们应该尽可能长。这就是为什么在示例中,我返回了dog down the street
,因为所有这些单词都在我的列表中,并且在字符串中彼此相邻。这仍然非常模糊。例如,如果句子是“我爱情歌”,而列表是[“歌曲”,“爱”,“我”]
,我们会得到“我爱”吗?“情歌”?还有别的吗?在匹配单词时,我们可以执行多少重新排列?如果句子是“我吃了一个苹果。”而列表是[“吃”、“土豆”、“足球”、“苹果”、“安”、“猩猩”、“我”]
,那么我们是否可以输出我吃了一个苹果
,即使列表中的单词之间有一大堆其他单词?我不太挑剔重复单词,所以两者都可以。在第二种情况下,可以忽略其他单词。