You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测DataFrame列文本语言并生成新列存储结果?

解决langdetect识别文本语言时的异常问题

问题场景

现有如下pandas DataFrame:

import pandas as pd

df = pd.DataFrame({
    'user': ['Id159', 'Id758', 'Id146', 'Id477', 'Id212', 'Id999'],
    'comment' : ["I inboxed you", '123', 123, 'je suis fatigué', "j'aime", 'ما نوع الجهاز بالضبط']  
})

目标是新增language列,存储comment列文本的语言标识,预期输出:

user    comment                     language
0   Id159   I inboxed you               en
1   Id758   123                         UNKNOWN
2   Id146   123                         UNKNOWN
3   Id477   je suis fatigué             fr
4   Id212   j'aime                      fr
5   Id999   ما نوع الجهاز بالضبط        ar

尝试直接使用langdetect.detect进行列表推导:

from langdetect import detect

df['language'] = [detect(x) for x in df['comment']]

运行时抛出异常:

LangDetectException: No features in text.

问题原因

comment列中存在纯数字内容(包括字符串类型和整数类型的123),这类文本没有可被langdetect识别的语言特征,导致检测失败抛出异常。

解决方案

定义一个包含异常捕获和前置过滤的函数,处理每个comment内容:

  1. 先将输入转为字符串并去除首尾空白
  2. 过滤纯数字或空文本的情况,直接返回UNKNOWN
  3. 对有效文本调用detect,捕获异常时返回UNKNOWN

具体代码:

from langdetect import detect, LangDetectException
import pandas as pd

df = pd.DataFrame({
    'user': ['Id159', 'Id758', 'Id146', 'Id477', 'Id212', 'Id999'],
    'comment' : ["I inboxed you", '123', 123, 'je suis fatigué', "j'aime", 'ما نوع الجهاز بالضبط']  
})

def detect_language(text):
    text_str = str(text).strip()
    if not text_str or text_str.isdigit():
        return 'UNKNOWN'
    try:
        return detect(text_str)
    except LangDetectException:
        return 'UNKNOWN'

df['language'] = df['comment'].apply(detect_language)
print(df)

运行后即可得到符合预期的结果。

内容的提问来源于stack exchange,提问作者Khaled DELLAL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:35:20