重要なのは、全単語サブシーケンスで検索するように変更することです。
from itertools import islice
def is_sublist(source, target):
slen = len(source)
return any(all(item1 == item2 for (item1, item2) in zip(source, islice(target, i, i+slen))) for i in range(len(target) - slen + 1))
def long_substr_by_word(data):
subseq = []
data_seqs = [s.split(' ') for s in data]
if len(data_seqs) > 1 and len(data_seqs[0]) > 0:
for i in range(len(data_seqs[0])):
for j in range(len(data_seqs[0])-i+1):
if j > len(subseq) and all(is_sublist(data_seqs[0][i:i+j], x) for x in data_seqs):
subseq = data_seqs[0][i:i+j]
return ' '.join(subseq)
デモ:
>>> data = ['commercial van for movers',
... 'partial van for movers',
... 'commercial van for moving']
>>> long_substr_by_word(data)
'van for'
>>>
>>> data = ['a bx bx z', 'c bx bx zz']
>>> long_substr_by_word(data)
'bx bx'
トライ単語のリストに分割する各文字列を、その後、あなたはそれはそれほど簡単ではありません – bunji
@bunjiを提供するソリューションを使用します。この解決策は 'in'を使って部分文字列をテストしますが、' in'を使って部分リストをテストすることはできません。 –
単語数の最大値または最長のサブチェーンは、現在最長のものを正確にする必要がありますか? –