如何检测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内容:
- 先将输入转为字符串并去除首尾空白
- 过滤纯数字或空文本的情况,直接返回
UNKNOWN - 对有效文本调用
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
相关产品推荐
相关产品推荐

