Я новичок в Python и сталкиваюсь с проектом НЛП.
Это мой код:
doc1 = "I am a dog and I like biscut"
doc2 = "I am a cat"
doc3 = "I like to drink milk"
doc4 = "I am a bird and I fly to the sky"
doc5 = "I am an elephant and I want to sleep"
docs = [doc1.split(' '), doc2.split(' '), doc3.split(' ')]
docs2 = [doc4.split(' '), doc5.split(' ')]
docs_all = doc1.split(' ') + doc2.split(' ') + doc3.split(' ') +
doc4.split(' ') + doc5.split(' ')
И я получаю набор документов:
print(list(enumerate(set(docs_all))))
[(0, 'a'), (1, 'the'), (2, 'drink'), (3, 'elephant'), (4, 'dog'), (5,
'biscut'), (6, 'cat'), (7, 'bird'), (8, 'an'), (9, 'milk'), (10, 'want'),
(11, 'am'), (12, 'I'), (13, 'and'), (14, 'to'), (15, 'sky'), (16, 'sleep'),
(17, 'like'), (18, 'fly')]
Справочная матрица документов и документов 2:
setdocs = [(0, 0.44), (1, 0.14), (2, 0.22), (3, 0.113), (4, 0.44), (5,
0.15), (6, 0.96), (7, 0.77), (8, 0.28), (9, 0.39), (10, 0.111)]
setdocs2 = [(0, 0.55), (1, 0.13), (2, 0.52), (3, 0.33), (4, 0.114),
(5,0.995),(6, 0.16), (7, 0.97), (8, 0.118), (9, 0.14), (10, 0.88), (11,
0.166), (12, 0.85)]
Первое значение в кортеже - это количество слов документов и документов2, взятых из
refdocs2 = list(enumerate(set(doc4.split(' ') + doc5.split(' '))))
refdocs = list(enumerate(set(doc1.split(' ') + doc2.split(' ') +
doc3.split(' '))))
print(refdocs)
print(refdocs2)
[(0, 'a'), (1, 'drink'), (2, 'dog'), (3, 'biscut'), (4, 'cat'), (5, 'milk'),
(6, 'am'), (7, 'I'), (8, 'and'), (9, 'to'), (10, 'like')]
[(0, 'a'), (1, 'the'), (2, 'elephant'), (3, 'bird'), (4, 'an'), (5, 'want'),
(6, 'sleep'), (7, 'am'), (8, 'I'), (9, 'and'), (10, 'to'), (11, 'sky'), (12,
'fly')]
Я хочучтобы получить следующую матрицу:
finaldocs = [[0.44, 0, 0, 0, 0.22, 0.113, 0, 0, 0, 0, 0, 0.96, 0.77, 0.28,
0, 0, 0, 0.111, 0],
[0.44, 0, 0, 0, 0, 0, 0.44, 0, 0, 0, 0, 0.96, 0.77, 0, 0, 0, 0,
0, 0],
[0, 0, 0.14, 0, 0, 0, 0, 0, 0, 0.15, 0, 0, 0.77, 0, 0.39,
0, 0, 0.111, 0]]
finaldocs2 = [[0.55, 0.13, 0, 0, 0, 0, 0, 0.33, 0, 0, 0.97, 0.118, 0.14,
0.88, 0.166, 0, 0, 0.85],[0, 0.13, 0, 0.52, 0, 0, 0, 0, 0.114,
0.995, 0.97, 0.118, 0.14, 0.88, 0, 0.16, 0, 0]]
Второе значение в кортеже setdocs
и setdocs2
- это значение, которое я хочу вывести.finaldocs [0] - finaldocs [3] ссылаются на doc1 - doc3 и получают второе значение кортежа в setdocs
с порядковым номером list(enumerate(set(docs_all)))
Например, doc2 = "Я являюсьcat "встречаются в значении 0, 6, 11, 12 в list(enumerate(set(docs_all)))
.«I», «am», «a» «cat» встречаются в значении 0,4,6,7 в refdocs
и получают второе значение в кортеже из setdocs
для создания finaldocs[2]
[0.44, 0, 0, 0, 0, 0, 0.44, 0, 0, 0, 0, 0.96, 0.77, 0, 0, 0, 0, 0, 0]
Мои попытки:
dll = [np.arange(19),np.arange(19),np.arange(19)]
for i in dll:
for ii in i:
for m in list(enumerate(set(docs_all))):
for mm,nn in m:
for t in refdocs:
for tt,ll in t:
for p in setdocs:
for pp,oo in p:
if nn in ll:
i.replace(i, oo)
Не получается.
Как получить finaldocs
путем кодирования в Python?