процесс занимает много времени, чтобы вычислить TF-IDF корпуса - PullRequest
0 голосов
/ 19 марта 2020
Программа

my python требует почти 20 se c для вычисления td-idf корпуса и сохранения кадра данных в csv. В моем корпусе около 411 документов с точными 276 словами. нормально ли это, если нет, чем я могу сделать этот процесс быстрым. Сначала я делаю токены, после чего удаляю стоп-лоты и разбиваю слова на части и, наконец, использую векторизатор tf-idf.

Ниже приведен код я использую

from pymongo import MongoClient
import csv
import nltk
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer 
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
import pandas as pd

def connect_db():
    client = MongoClient("localhost", 27017)
    return client

client = connect_db()
ps=PorterStemmer()
db = client['geoDB']#database creation in mongodb
geoT=db['geoT']
documents = list(geoT.find())
tokens=[]

for doc in documents:
    word_data = str(doc)
    nltk_tokens = nltk.word_tokenize(word_data)
    tokens.append(np.array(nltk_tokens))

tokenizedStory=np.array(tokens)#tokenized stories

stop_words = set(stopwords.words('english')) 

i=0
filteredListOfStory=[]
filteredStory=[]
for stories in tokenizedStory:
    for words in stories:
        if words not in stop_words and 'www.geo.tv' not in words and '5e6' not in words and '5e7' not in words:
            filteredStory.append(words)
    filteredListOfStory.append(filteredStory)#filtered stories
    filteredStory=[]

stemedStories=""
StemedListOfStories=[]
wordCounter=0
for story in filteredListOfStory: 
    for words in story:
        stemedStories=stemedStories+" "+ps.stem(words)
        wordCounter=wordCounter+1
    StemedListOfStories.append(stemedStories)
    stemedStories=""

print("======Word Counter========",wordCounter)
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform(StemedListOfStories)

feature_names = vectorizer.get_feature_names()
# print(feature_names)
dense = vectors.todense()
denselist = dense.tolist()
df = pd.DataFrame(denselist, columns=feature_names)
df.to_csv (r'C:\Users\salman\Desktop\export_dataframe.csv', index = False, header=True)
...