Python 大数据语言检测
Language detection in Python for big data
我正在尝试 运行 对 pandas 数据帧中的 Series 对象进行语言检测。然而,我正在处理数百万行的字符串数据,标准的 Python 语言检测库 langdetect
和 langid
太慢了,经过数小时的 运行ning 它还没有完成。
我的代码设置如下:
#function to detect language
def detect_language (cell):
if len(cell) > 0:
lan = langid.classify(cell)
else:
lan = "NaN"
return lan
#language detection using langid module
df['language'] = df.apply(lambda row: detect_language(row.Series), axis = 1)
有没有人对如何加速我的代码或者是否有其他库有建议?
您可以使用 swifter to make your df.apply()
more efficient. In addition to that, you might want to try whatthelang 库,它应该比 langdetect
更有效。
将数据采样到多个随机集合中,然后使用 fasttext https://fasttext.cc 快速得到结果。快速高效。
import fasttext
path_to_pretrained_model = "lid.176.bin"
fmodel = fasttext.load_model(path_to_pretrained_model)
from datetime import datetime
df['language']=''
for i in df.index:
ln_cnt = i
result = fmodel.predict(str(df['prcsd_title'][i]))
#print(result[0])
#detector.FindLanguage(text=str(df['prcsd_title'][i]))
df['language'][i]=result[0]
if i%10000==0:
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)
print(i)
如果您有 Windows OS,则必须安装 Ubuntu。参考这个视频 link https://www.youtube.com/watch?v=tQvghqdefTM&t=177s
尝试:
from pandarallel import pandarallel
pandarallel.initialize(progress_bar=True)
"""
then instead of apply, use parallel_apply to use all the cores of your CPU to parallelize it
"""
df['new_column'] = df['your_column'].parallel_apply(lang_detect_func)
我正在尝试 运行 对 pandas 数据帧中的 Series 对象进行语言检测。然而,我正在处理数百万行的字符串数据,标准的 Python 语言检测库 langdetect
和 langid
太慢了,经过数小时的 运行ning 它还没有完成。
我的代码设置如下:
#function to detect language
def detect_language (cell):
if len(cell) > 0:
lan = langid.classify(cell)
else:
lan = "NaN"
return lan
#language detection using langid module
df['language'] = df.apply(lambda row: detect_language(row.Series), axis = 1)
有没有人对如何加速我的代码或者是否有其他库有建议?
您可以使用 swifter to make your df.apply()
more efficient. In addition to that, you might want to try whatthelang 库,它应该比 langdetect
更有效。
将数据采样到多个随机集合中,然后使用 fasttext https://fasttext.cc 快速得到结果。快速高效。
import fasttext
path_to_pretrained_model = "lid.176.bin"
fmodel = fasttext.load_model(path_to_pretrained_model)
from datetime import datetime
df['language']=''
for i in df.index:
ln_cnt = i
result = fmodel.predict(str(df['prcsd_title'][i]))
#print(result[0])
#detector.FindLanguage(text=str(df['prcsd_title'][i]))
df['language'][i]=result[0]
if i%10000==0:
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)
print(i)
如果您有 Windows OS,则必须安装 Ubuntu。参考这个视频 link https://www.youtube.com/watch?v=tQvghqdefTM&t=177s
尝试:
from pandarallel import pandarallel
pandarallel.initialize(progress_bar=True)
"""
then instead of apply, use parallel_apply to use all the cores of your CPU to parallelize it
"""
df['new_column'] = df['your_column'].parallel_apply(lang_detect_func)