我正在研究一个抓取项目,由于某些原因,我在某些段落中得到了完整的段落,也得到了分成段的同一段落。因此,如果该段为“我的房子是绿色的,我喜欢它。”,我有时会得到:
["My house is green. I like it.", "My house is green.", "I like it."]
因此,当我将所有内容转换为文本时,我都会将该段重复。有什么方法可以检查列表中其他字符串的子集是哪些字符串?
在这种情况下,我期望的输出将只保留["My house is green. I like it."]
答案 0 :(得分:0)
一种有效的方法是:以相反的顺序遍历按短语长度排序的列表,并将每个可能的子短语添加到集合中,以便您可以使用集合有效地检查当前短语是否是子短语-前一个较长短语的短语:
output = []
seen = set()
for phrase in sorted(l, key=len, reverse=True):
words = tuple(phrase.split())
if words not in seen:
output.append(phrase)
seen.update({words[i: i + n + 1] for n in range(len(words)) for i in range(len(words) - n)})
所以给定:
l = ["My house is green. I like it.", "My house is green.", "I like it."]
output
变为:
['My house is green. I like it.']
答案 1 :(得分:-1)
我会这样从列表中取出最长的字符串:
arr = ["My house is green. I like it.", "My house is green.", "I like it."]
print(max(arr, key=len))
最长的字符串不能是其他字符串的子字符串