Python 大数据语言检测

Language detection in Python for big data

我正在尝试 运行 对 pandas 数据帧中的 Series 对象进行语言检测。然而,我正在处理数百万行的字符串数据,标准的 Python 语言检测库 langdetectlangid 太慢了,经过数小时的 运行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)