在 Python 中优化语言检测代码和词形还原
Optimizing Language Detection code and Lemmatization in Python
我有一个 JSON 格式的亚马逊用户评论数据,我正在将其导入 pandas 数据框并使用它来训练文本分类模型。我正在尝试在使用该数据训练模型之前预处理用户评论文本。我这里有两个问题:
1) 我在 Python 中使用 Textblob 库编写了一段代码来检测它的语言,它工作正常但耗费了大量时间。请告诉我在 python 中使用 Textblob 库是否有最佳 approach.I 代码是:
from textblob import TextBlob
def detect_language(text):
if len(text)>3:
r=TextBlob(text)
lang = r.detect_language()
return lang
dataset['language']=dataset.reviewText.apply(lambda x: detect_language(x))
2) 我想在训练模型之前对我的话进行词形还原。但是如果我们用单词标记词性,NLTK 中的词形还原将正常工作,我正在尝试如下但出现一些错误:
from nltk import pos_tag
from nltk.stem import WordNetLemmatizer
text='my name is shubham'
text=pos_tag(text.split())
wl=WordNetLemmatizer()
for i in text:
print(wl.lemmatize(i))
在这里,我将 pos 标记为:
[('my', 'PRP$'), ('name', 'NN'), ('is', 'VBZ'), ('shubham', 'JJ')]
在进行词形还原时出现错误:
AttributeError: 'tuple' object has no attribute 'endswith'
能否请您提出一种有效的词形还原方法。
这是我正在执行语言检测和词形还原的示例数据:
overall reviewText
5 Not much to write about here, but it does exac...
5 The product does exactly as it should and is q...
5 The primary job of this device is to block the...
5 Nice windscreen protects my MXL mic and preven...
5 This pop filter is great. It looks and perform...
TL;DR
from nltk import pos_tag, word_tokenize
from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()
def penn2morphy(penntag):
""" Converts Penn Treebank tags to WordNet. """
morphy_tag = {'NN':'n', 'JJ':'a',
'VB':'v', 'RB':'r'}
try:
return morphy_tag[penntag[:2]]
except:
return 'n'
def lemmatize_sent(text):
# Text input is string, returns lowercased strings.
return [wnl.lemmatize(word.lower(), pos=penn2morphy(tag))
for word, tag in pos_tag(word_tokenize(text))]
对字符串的数据框列进行词形还原。
df['lemmas'] = df['text'].apply(lemmatize_sent)
中龙
我有一个 JSON 格式的亚马逊用户评论数据,我正在将其导入 pandas 数据框并使用它来训练文本分类模型。我正在尝试在使用该数据训练模型之前预处理用户评论文本。我这里有两个问题:
1) 我在 Python 中使用 Textblob 库编写了一段代码来检测它的语言,它工作正常但耗费了大量时间。请告诉我在 python 中使用 Textblob 库是否有最佳 approach.I 代码是:
from textblob import TextBlob
def detect_language(text):
if len(text)>3:
r=TextBlob(text)
lang = r.detect_language()
return lang
dataset['language']=dataset.reviewText.apply(lambda x: detect_language(x))
2) 我想在训练模型之前对我的话进行词形还原。但是如果我们用单词标记词性,NLTK 中的词形还原将正常工作,我正在尝试如下但出现一些错误:
from nltk import pos_tag
from nltk.stem import WordNetLemmatizer
text='my name is shubham'
text=pos_tag(text.split())
wl=WordNetLemmatizer()
for i in text:
print(wl.lemmatize(i))
在这里,我将 pos 标记为:
[('my', 'PRP$'), ('name', 'NN'), ('is', 'VBZ'), ('shubham', 'JJ')]
在进行词形还原时出现错误:
AttributeError: 'tuple' object has no attribute 'endswith'
能否请您提出一种有效的词形还原方法。 这是我正在执行语言检测和词形还原的示例数据:
overall reviewText
5 Not much to write about here, but it does exac...
5 The product does exactly as it should and is q...
5 The primary job of this device is to block the...
5 Nice windscreen protects my MXL mic and preven...
5 This pop filter is great. It looks and perform...
TL;DR
from nltk import pos_tag, word_tokenize
from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()
def penn2morphy(penntag):
""" Converts Penn Treebank tags to WordNet. """
morphy_tag = {'NN':'n', 'JJ':'a',
'VB':'v', 'RB':'r'}
try:
return morphy_tag[penntag[:2]]
except:
return 'n'
def lemmatize_sent(text):
# Text input is string, returns lowercased strings.
return [wnl.lemmatize(word.lower(), pos=penn2morphy(tag))
for word, tag in pos_tag(word_tokenize(text))]
对字符串的数据框列进行词形还原。
df['lemmas'] = df['text'].apply(lemmatize_sent)