2017-09-21 82 views
-1

我有一段使用文本blob索引單詞的代碼。我當前的輸出來自每個doc的for循環(如doc1,doc2,doc3等)如何從for循環創建np數組

從每個文檔我想有一個向量的4個最重要的單詞,我希望返回其索引數字轉換爲4,1 np.array。不幸的是,我似乎無法解決這個問題。

bloblist = [doc1, doc2, doc3, doc4, doc5, doc6, doc7, doc8, doc9, doc10, doc11] 
for i, blob in enumerate(bloblist): 
    print("Top words in doc {}".format(i + 1)) 
    scores = {word: tfidf(word, blob, bloblist) for word in blob.words} 
    sorted_words = sorted(scores.items(), key=lambda x: x[1], reverse=True) 
    corpus = blob.words 
    wordIndex = list(enumerate(corpus)) 
    for word, score in sorted_words[:4]: 
     arr = (corpus.index(word)) 
     print(arr) 

這將產生以下:

Top words in doc 1 
5 
0 
1 
2 
Top words in doc 2 
19 
12 
41 
4 

這是很酷,但我想有像這樣

Top words in doc 1 
[5,0,1,2] 

誰能幫助我嗎?

+0

首先,考慮使用[計數器](https://docs.python.org/2/library/collections.html#collections.Counter )。其次,「我想有一個最重要的4個詞的向量,我希望返回它的索引號。」什麼索引號?第一次出現? –

+0

您正在每次迭代打印arr。我想你要找的是在第二個for循環之前初始化一個名爲arr的數組,然後在每個迭代中追加到這個數組,最後在循環完成後打印。 – Oli

+0

嗨布拉德,是的,對不起,索引部分並沒有真正的幫助。我使用textblob對每個單詞進行索引,以便每個包含每個單詞的文檔的文檔都有固定的編號。嗯,我覺得這很難解釋,但基本上我需要基於許多文檔的語料庫,然後應該能夠使用它的索引來引導每個文檔的前4個詞。 – dsloet

回答

1

感謝Oli我找到了適合我的解決方案。

bloblist = [doc1, doc2, doc3, doc4, doc5, doc6, doc7, doc8, doc9, doc10, doc11] 
for i, blob in enumerate(bloblist): 
    print("Top words in doc {}".format(i + 1)) 
    scores = {word: tfidf(word, blob, bloblist) for word in blob.words} 
    sorted_words = sorted(scores.items(), key=lambda x: x[1], reverse=True) 
    corpus = blob.words 
    wordIndex = list(enumerate(corpus)) 
    arr = np.array([]) 
    for word, score in sorted_words[:4]: 
     arrw = np.array([corpus.index(word)]) 
     arr = np.concatenate((arr, arrw)) 
    print(arr) 
    arr = arr.reshape(4,1) 
    print(arr.shape) 

給出以下所需的輸出:

Top words in doc 1 
[ 5. 0. 1. 2.] 
(4, 1) 
Top words in doc 2 
[ 19. 12. 41. 4.] 
(4, 1) 
Top words in doc 3 
[ 16. 2. 6. 7.] 
(4, 1)