我需要处理一系列空格分隔的字符串,即文本句子。 “共现”是指同一个句子上出现两个标签(或单词)。当它们一起出现在至少两行(两个句子)时,我需要列出所有共同出现的单词。该清单必须按顺序排列。
输入示例:
tag1 tag2
tag1 tag3
tag2 tag4 tag3
tag2 tag3
输出应为:
tag2 tag3
我不能假设输入适合内存。 我所知道的是,不会有超过10,000个标签。 我的问题是读取整个输入并创建所有单词的矩阵并在出现共现时勾选它的蛮力无效。
必须有一个我没有找到的算法或方法。 我很欣赏提示/链接或对可能有用的算法或功能的引用。我理解c,c ++,MATLAB,python
答案 0 :(得分:0)
有点麻烦:
import re
tags = list(set(input_string.split()))
tag_length = len(tags)
for i in xrange(tag_length - 1):
for j in xrange(tag_length - 2 - i):
tag1, tag2 = tags[i], tags[i + j + 1]
matches = re.findall(r'\b{0}\b.+\b{1}\b'.format(tag1, tag2), input_string)
if len(matches) > 1:
print tag1, tag2
答案 1 :(得分:0)
为什么不输出tag1?在第一和第二行..?
all_tags_generator = (set(line.rstrip().split()) for line in sys.stdin) # or change sys.stdin to open("your file")
all_tags = set()
for new_tags in all_tags_generator:
realy_new_tags = new_tags.difference(all_tags)
for tag in realy_new_tags:
print(tag, end=" ")
all_tags.update(intersection)