python在数据框中的快速文本处理

问题描述:

我正在研究python中的电子商务数据。我已经将这些数据加载到python中并将其转换为熊猫数据框架。现在,我想对数据执行文本处理,例如删除不需要的字符,停用词,词干等。目前我应用的代码工作正常,但需要很长时间。我有大约200万行数据需要处理,并且需要永久处理。我在10,000行上试过这个代码,花了大约240秒。我正在进行这种项目,这是第一次。任何减少时间的帮助都会很有帮助。python在数据框中的快速文本处理

在此先感谢。

from nltk.stem import PorterStemmer 
from nltk.corpus import stopwords 
import re 

def textprocessing(text): 
    stemmer = PorterStemmer() 
    # Remove unwanted characters 
    re_sp= re.sub(r'\s*(?:([^a-zA-Z0-9._\s "])|\b(?:[a-z])\b)'," ",text.lower()) 
    # Remove single characters 
    no_char = ' '.join([w for w in re_sp.split() if len(w)>1]).strip() 
    # Removing Stopwords 
    filtered_sp = [w for w in no_char.split(" ") if not w in stopwords.words('english')] 
    # Perform Stemming 
    stemmed_sp = [stemmer.stem(item) for item in filtered_sp] 
    # Converting it to string 
    stemmed_sp = ' '.join([x for x in stemmed_sp]) 
    return stemmed_sp 

我呼吁该数据帧这种方法:

files['description'] = files.loc[:,'description'].apply(lambda x: textprocessing(str(x))) 

您可以采取的任何数据,按您的方便。由于某些政策,我无法分享数据。

+0

一个快速的变化,可以帮助:它看起来像停用词通常是一个列表,并有2400个条目。使它成为一个集合可以大大加快'停用词'中的'如果不是w'。首先尝试对较小的提取物进行更改。此外,应用似乎有时比正常的列表理解有时慢 - 可能值得提取列,做你的代码(这实际上是一个很好的处理)作为列表理解,然后重新插入... –

+0

我以前经历过对熊猫的“应用”要比在列表或字典等其他结构中应用函数慢得多。 是否有一个特定的原因,你希望他们在'pandas.DataFrame'中?你有没有考虑过使用另一个? –

+0

我正在通过数据库加载它。这就是为什么我将它转换为DataFrame来处理它。是否有其他数据存储选项,我可以轻松应用和工作? – Sam

你可以尝试去完成它在一个循环,而不是创建词干/ stop_word每次循环

STEMMER = PorterStemmer() 
    STOP_WORD = stopwords.words('english') 
    def textprocessing(text): 

    return ''.join(STEMMER.stem(item) for token in re.sub(r'\s*(?:([^a-zA-Z0-9._\s "])|\b(?:[a-z])\b)'," ",text.lower()).split() if token not in STOP_WORD and len(token) > 1) 

你也可以使用NLTK去除unwant字

from nltk.tokenize import RegexpTokenizer 
STEMMER = PorterStemmer() 
STOP_WORD = stopwords.words('english') 
TOKENIZER = RegexpTokenizer(r'\w+') 
def textprocessing(text): 
    return ''.join(STEMMER.stem(item) for token in TOKENIZER.tokenize(test.lower()) if token not in STOP_WORD and len(token) > 1) 
+0

谢谢.. !!!它确实提高了几次速度,而且代码中的修复很少。 – Sam