每一個可以努力的日子,都是一份厚禮。
反向索引Inverted Index – Map Reduce Program
Inverted Index (反向索引)是搜索引擎需要做的一件經常性工作。在Google提出Map Reduce分布式編程框架中,這是一件很容易完成的事情。下面就是一個python寫的示例。
Map:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/bin/python # # InvertedIndex mapper in Python # Author: Zeng, Xi # SID: 1010105140 # Email: [email protected] import sys def main(argv): line = sys.stdin.readline().lower() words = line.split() try: while line: for word in words[1:]: print line.split()[0] + "\t" + word line = sys.stdin.readline().lower() words = line.split() except "end of file": return None if __name__ == "__main__": main(sys.argv) |
Reduce:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #!/usr/bin/python # # InvertedIndex reducer in Python # Author: Zeng, Xi # SID: 1010105140 # Email: [email protected] import sys index_list = {} ## collect (key,val) pairs from sort phase for line in sys.stdin: try: word, index = line.strip().split("\t", 2) if index not in index_list: index_list[index] = word else: if word not in index_list[index]: index_list[index] = index_list[index] + " " + word except ValueError, err: sys.stderr.write("Value ERROR: %(err)s\n%(data)s\n" % {"err": str(err), "data": line}) ## emit results for word, index in index_list.items(): print " ".join([word, index]) |
這篇文章由lovelucy於2011-01-04 20:42發表在編程。你可以訂閱RSS 2.0 也可以發表評論或引用到你的網站。除特殊說明外文章均為本人原創,並遵從署名-非商業性使用-相同方式共享創作協議,轉載或使用請註明作者和來源,尊重知識分享。 |
批評不自由
則讚美無意義