2016-06-08 2 views
0
# -*- coding: utf-8 -*- 
from __future__ import print_function 
import os, codecs, re, string, mysql 
import mysql.connector 

'''Reading files with txt extension''' 
y_ = "" 
for root, dirs, files in os.walk("/Users/Documents/source-document/part1"): 
    for file in files: 
     if file.endswith(".txt"): 
      x_ = codecs.open(os.path.join(root,file),"r", "utf-8-sig") 
      for lines in x_.readlines(): 
       y_ = y_ + lines 
#print(tokenized_docs) 

'''Tokenizing sentences of the text files''' 

from nltk.tokenize import sent_tokenize 
raw_docs = sent_tokenize(y_) 

tokenized_docs = [sent_tokenize(y_) for sent in raw_docs] 

'''Removing stop words''' 

stopword_removed_sentences = [] 
from nltk.corpus import stopwords 
stopset = stopwords.words("English") 
for i in tokenized_docs[0]: 
    tokenized_docs = ' '.join([word for word in i.split() if word not in stopset]) 
    stopword_removed_sentences.append(tokenized_docs) 

''' Removing punctuation marks''' 

regex = re.compile('[%s]' % re.escape(string.punctuation)) #see documentation here: http://docs.python.org/2/library/string.html 
nw = [] 
for review in stopword_removed_sentences: 
    new_review = '' 
    for token in review: 
     new_token = regex.sub(u'', token) 
     if not new_token == u'': 
      new_review += new_token 
    nw.append(new_review) 

'''Lowercasing letters after removing puctuation marks.''' 

lw = [] #lw stands for lowercase word. 
for i in nw: 
    k = i.lower() 
    lw.append(k) 

'''Removing number with a dummy symbol''' 
nr = [] 
for j in lw: 
    string = j 
    regex = r'[^\[\]]+(?=\])' 
# let "#" be the dummy symbol 
    output = re.sub(regex,'#',string) 
    nr.append(output) 
nrfinal = []  
for j in nr: 
    rem = 0 
    outr = '' 
    for i in j: 
     if ord(i)>= 48 and ord(i)<=57: 
      rem += 1 
      if rem == 1: 
       outr = outr+ '#' 
     else: 
      rem = 0    
      outr = outr+i 
    nrfinal.append(outr) 

'''Inserting into database''' 
def connect(): 
    for j in nrfinal: 
     conn = mysql.connector.connect(user = 'root', password = '', unix_socket = "/tmp/mysql.sock", database = 'Thesis') 
     cursor = conn.cursor() 
     cursor.execute("""INSERT INTO splitted_sentences(sentence_id, splitted_sentences) VALUES(%s, %s)""",(cursor.lastrowid,j)) 
     conn.commit() 
     conn.close() 
if __name__ == '__main__': 
    connect() 

У меня нет ошибок с этим кодом. Это хорошо для текстовых файлов. Проблема заключается только в времени выполнения, так как у меня много текстовых файлов (около 6 ГБ), для которых программа занимает слишком много времени. При осмотре я обнаружил, что он связан с ЦП. Поэтому для его решения требуется многопроцессорная обработка. Пожалуйста, помогите мне написать мой код с мультипроцессорным модулем, чтобы можно было выполнить параллельную обработку. Спасибо всем.как мы можем написать программу, используя многопроцессорный модуль Python?

+0

Прежде чем использовать многопроцессорную обработку --- реорганизуйте свой код, выглядящий слабостями. – Merlin

+0

Поскольку код работает, сообщение на http://codereview.stackexchange.com/ – Merlin

+0

@Merlin OP спрашивает о том, что код еще не написан, следовательно, он отключен от темы на CR – Heslacher

ответ

1

есть пример в python docs, который демонстрирует использование multiprocessing:

from multiprocessing import Pool 
def f(x): 
    return x*x 

if __name__ == '__main__': 
    with Pool(5) as p: 
     print(p.map(f, [1, 2, 3])) 

Вы можете использовать это, чтобы адаптировать свой код. После того, как вы получили текстовые файлы, вы используете функцию map для выполнения остальных в параллельном режиме. Вам нужно будет определить функцию, инкапсулирующую код, который вы хотите выполнить на нескольких ядрах.

Однако чтение файлов параллельно может снизить производительность. Кроме того, добавление контента в базу данных в асинхронном режиме может не работать. Таким образом, вы можете выполнить эти две задачи в основном потоке, но

Смежные вопросы