python逆インデックス
6700 ワード
一.実験の目的
1.リスト、集合と辞書の定義、値付け、使用などの基本操作を把握し、複雑なデータ型を処理する一般的な流れを熟知する.リスト、コレクション、辞書の一般的な関数とテクニックを熟知しています.テキストの柔軟な処理とソートアルゴリズムの運用を考察する
二.実験内容
本実験は主に以下の3つの機能を完成した.
問題を解く構想.
具体的な実現と問題点
ディクショナリの作成:私はディクショナリというストレージ構造を使用しています.私は最初の100行のすべての単語をkeyとして使用しています.valuesは各単語の出現行数を格納する集合です.
辞書の印刷:辞書の順序に合致する辞書を出力するため、pythonが持参したソート関数を使用し、ソートの結果がlist(インデックス値はkey、インデックス結果はsetのリスト形式)であることに注意して、楽しく印刷できます.
クエリ:ANDクエリは集合の交差であり,ORクエリは集合の並列である.だから私は辞書を建てるとき、valuesとしてsetを賢く使いました.
境界の状況:クエリー時にスペース行があります.
問題:
コード:
pythonからインデックスを転載
1.リスト、集合と辞書の定義、値付け、使用などの基本操作を把握し、複雑なデータ型を処理する一般的な流れを熟知する.リスト、コレクション、辞書の一般的な関数とテクニックを熟知しています.テキストの柔軟な処理とソートアルゴリズムの運用を考察する
二.実験内容
(Inverted index), , , 。 。 , 。
本実験は主に以下の3つの機能を完成した.
(1). : 100 , , 、 , 。 , , 1 。
(2). : , 。 , “created” 3, 20 ,“dead” 14, 20, 22 。 ( , ):
…
created: 3, 20
dead: 14, 20, 22
…
(3). : (Query) , , (Keywords) , 。 ( ), 。 , “None”。 。 , “created” , “3, 20”; “created dead” , “20”; “abcde dead” , “None”;
(4). : Query “AND:” , “ ” , ; Query “OR:” , “ ” , 。 ( “AND:” “OR:” ), “ ” 。
問題を解く構想.
: 100 , , 。 :AND OR ,AND ,OR 。 “(3). ” AND 。
具体的な実現と問題点
ディクショナリの作成:私はディクショナリというストレージ構造を使用しています.私は最初の100行のすべての単語をkeyとして使用しています.valuesは各単語の出現行数を格納する集合です.
辞書の印刷:辞書の順序に合致する辞書を出力するため、pythonが持参したソート関数を使用し、ソートの結果がlist(インデックス値はkey、インデックス結果はsetのリスト形式)であることに注意して、楽しく印刷できます.
クエリ:ANDクエリは集合の交差であり,ORクエリは集合の並列である.だから私は辞書を建てるとき、valuesとしてsetを賢く使いました.
境界の状況:クエリー時にスペース行があります.
問題:
, set,dictionary…… list。
s = ‘ ’ s.split() [ ] s.spilt( ) [ , ]
コード:
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 22 09:57:06 2014
@author: Liyu Fu
"""
'''Step one:New Dictionary'''
dict1 = {}
for i in range(100):
sentence = raw_input()
word_list = sentence.split()
for word in word_list:
if word not in dict1:
dict1[word] = set() #new word
dict1[word].add(i+1) #update for dictionary
'''Step two:Print Index'''
answer_list = sorted(dict1.iteritems(),key=lambda d:d[0])#Sort by keyword of dictionary.
for word in answer_list:
l = list(word[1])
l.sort()
print word[0]+': '+', '.join(map(str,l)) #Print Index
def print_answer(answer_set): #Output search results
empty_set = set()
if empty_set == answer_set: #answer_set is empty
print 'None'
else:
answer_list=list(answer_set)
answer_list.sort()
print ', '.join(map(str,answer_list)) #Print answer of Query
'''Step three:Retrieval'''
while True:
Query = raw_input()
if Query == '': break #Exit condition
answer_set = set()
if 'OR:' in Query: #OR-Retrieval
Query = Query[3:]
Q_word_list = Query.split()
for word in Q_word_list:
if (word != '')and(word in dict1):
answer_set = dict1[word]|answer_set #set or
print_answer(answer_set)
else: #AND-Retrieval
if 'AND:' in Query:Query = Query[4:]
Q_word_list = Query.split()
if Q_word_list!=[]:
for i in range(1,101):answer_set.add(i)
for word in Q_word_list:
if (word != ''):
if word in dict1:
answer_set = dict1[word]&answer_set #set and
else:answer_set = set() #wrong word
print_answer(answer_set)
else:print 'None'
pythonからインデックスを転載