[すべてのドキュメントで一意のシングル セット] x [ドキュメント ID] のブール マトリックスを作成する必要があります。これまでのところ、allshinglesUという名前のリストがあり、これにはすべてのドキュメントのすべての固有の帯状疱疹のセットが含まれています。また、 docsAsShingleSetsWという名前のキーと値のディクショナリもあります。このディクショナリには、キーとしてドキュメント ID があり、そのドキュメントで見つかったシングル セットが値として含まれています。一意のシングル セットがドキュメント n に表示されるかどうかを識別するブール マトリックスを作成するにはどうすればよいですか?
これまでの私の進捗状況は次のとおりです。
docsAsShingleSetsW = {}
# Maintain a list of all document IDs.
docNames = []
shingle_size = 2
totalShingles = 0
shingleNo = 0
allshingles = []
for i in range(0, len(documents)):
# Read all of the words
words = documents[i]
words = words.split()
docID = i
docNames.append(docID)
# 'shinglesInDoc' will hold all of the unique shingles present in the current document. If a shingle ID occurs multiple times in the document, it will only appear once in the set.
# keep word shingles
shinglesInDocWords = set()
# keep hashed shingles
shinglesInDocInts = set()
shingle = []
# For each word in the document...
for index in range(len(words) - shingle_size + 1):
# Construct the shingle text by combining k words together.
shingle = words[index:index + shingle_size]
shingle = ' '.join(shingle)
# Hash the shingle to a 32-bit integer.
crc = binascii.crc32(bytes(shingle,encoding='utf8')) & 0xffffffff
if shingle not in shinglesInDocWords:
shinglesInDocWords.add(shingle)
allshingles.append(shingle)
# Add the hash value to the list of shingles for the current document.
# Note that set objects will only add the value to the set if the set
# doesn't already contain it.
if crc not in shinglesInDocInts:
shinglesInDocInts.add(crc)
# Count the number of shingles across all documents.
shingleNo = shingleNo + 1
else:
del shingle
index = index - 1
# Store the completed list of shingles for this document in the dictionary.
docsAsShingleSets[docID] = shinglesInDocInts
docsAsShingleSetsW[docID] = shinglesInDocWords
totalShingles = shingleNo