что это за способ проверить, записаны ли два слова в предложении и сколько раз это происходит в python. Например: мне нравится есть маки суши, а лучшие суши - в Японии. слова: [маки, суши]
Благодарю.
Код
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
В соответствии с добавленным кодом вы подразумеваете, что слова смежны?
Почему бы просто не собрать их вместе:
print len(re.findall(r'\bmaki sushi\b', sent))
def ordered(string, words):
pos = [string.index(word) for word in words]
return pos == sorted(pos)
s = "I like to eat maki sushi and the best sushi is in Japan"
w = ["maki", "sushi"]
ordered(s, w) #Returns True.
Не совсем самый эффективный способ сделать это, но проще понять.
s = 'I like to eat maki sushi and the best sushi is in Japan'
проверить заказ
indices = [s.split().index(w) for w in ['maki', 'sushi']]
sorted(indices) == indices
как считать
s.split().count('maki')
Примечание (на основе обсуждения ниже):
предположим, что предложение "Мне нравится маким больше, чем суши или маки". Понимая, что маким - другое слово, чем маки, слово maki помещается после суши и встречается только один раз в предложении. Чтобы обнаружить это и правильно подсчитать, предложение должно быть разделено на пробелы на фактические слова.
Регулярное решение :)
import re
sent = 'I like to eat maki sushi and the best sushi is in Japan'
words = sorted(['maki', 'sushi'])
assert re.search(r'\b%s\b' % r'\b.*\b'.join(words), sent)
если 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)
Просто и идея, возможно, потребуется дополнительная работа
(sentence.index('maki') <= sentence.index('sushi')) == ('maki' <= 'sushi')
index()
даст вам самый низкий индекс. Это также вызовет ValueError
если слово отсутствует в строке. Это будет работать только для самых простых случаев.