Как мы можем сделать этот python код более эффективным для запуска огромных текстовых файлов? - PullRequest
0 голосов
/ 25 апреля 2020

Я создал файл python со следующим кодом. Я хочу, чтобы код делал следующее:

  1. Извлечение содержимого из текстового файла, очистка его для пунктуации, удаление без букв c, переход к нижнему регистру
  2. Создание Unigrams и биграммы и объединить их
  3. Удалить стоп-слова (только после создания биграмм и не раньше), а затем дублировать слова
  4. Показать список слов раньше. и после выполнения сохраните вывод в виде текстового файла.

Я хочу запустить этот код для огромных текстовых файлов.

Может кто-нибудь помочь мне сделать этот код более эффективным? Я новичок ie и написал этот код с помощью inte rnet.

Код:

#<<<---------- INPUT TEXT FILE ------------>>>
# load data
filename = 'input.txt'
file = open(filename, 'rt')
text = file.read()
file.close()
#<<<---------- CLEAN TEXT ------------>>>
# split into words
import nltk
from nltk.tokenize import word_tokenize
tokens = nltk.word_tokenize(text)
# convert to lower case
tokens = [w.lower() for w in tokens]
# remove punctuation from each word
import string
table = str.maketrans('', '', string.punctuation)
stripped = [w.translate(table) for w in tokens]
# remove remaining tokens that are not alphabetic
words = [word for word in stripped if word.isalpha()]
#join words as a sentence
cleantext = " ".join(words)
#<<<---------- CREATE UNIGRAMS ------------>>>
unigrm1 = nltk.word_tokenize(cleantext)
#<<<---------- CREATE BIGRAMS ------------>>>
tokens1 = nltk.word_tokenize(cleantext)
bigrm = nltk.bigrams(tokens1)
bigrm = list(nltk.bigrams(cleantext.split()))
bigrm1 = [' '.join(t) for t in bigrm]
#<<<---------- COMBINE UNIGRAMS & BIGRAMS ------------>>>
ngram1 = unigrm1 + bigrm1
ngram2 = ", ".join(ngram1)
#<<<---------- REMVOE DUPLCIATES IN BIGRAMS ------------>>>
# stop words removal
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
text_tokens = word_tokenize(ngram2)
tokens_without_sw = [word for word in text_tokens if not word in stopwords.words()]
words = (" ").join(tokens_without_sw)
words = words.replace(" ,", ",")
words = words.replace(",,,,,", ",")
words = words.replace(",,,", ",")
words = words.replace(",,", ",")
words = words.split(", ")
words.sort()
# remove duplicates
k = [] 
for i in words:   
    # If condition is used to store unique string  
    # in another list 'k'  
    if (words.count(i)>1 and (i not in k)or words.count(i)==1): 
        k.append(i) 
#<<<---------- SHOW NUMBER OF WORDS ------------>>>
countwords = text.split()
print('Number of words in raw file :', len(countwords))
file.close()
print('Number of words in extracted file :', len(k))
file.close()
#<<<---------- SAVE AS OUTPUT TEXT FILE ------------>>>
# save as text output
import sys
file = open('output.txt', 'w+')
sys.stdout = file
print(*map(''.join, k), sep=', ')
file.close()
#<<<---------- END OF CODES ------------>>>

1 Ответ

0 голосов
/ 25 апреля 2020

Эта строка может быть удалена при сбросе bigrm в следующей строке.

bigrm = nltk.bigrams(tokens1)

В этом разделе file.close () вызывается два раза, но файл не открыт, поэтому file.close () можно отбросить в обоих случаях.

#<<<---------- SHOW NUMBER OF WORDS ------------>>>
countwords = text.split()
print('Number of words in raw file :', len(countwords))
print('Number of words in extracted file :', len(k))

Кроме того, sys.stdout должен быть сброшен после использования.

orig_stdout = sys.stdout
sys.stdout = file
print(*map(''.join, k), sep=', ')
file.close()
sys.stdout = orig_stdout

По крайней мере, тогда вы сможете продолжить взаимодействие с терминалом после запуска кода должен быть небольшой плюс:)

...