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

如何使用KBBI印尼语词典过滤文本中的非词典词汇?

解决KBBI词典过滤印尼语拼写错误的问题

你的代码报错是因为KBBI是类类型,不是可迭代的集合对象,直接用word in KBBI会触发类型错误——类不能被当作可迭代容器来判断成员归属。

以下是两种可行的解决方案:

方案一:使用异常捕获直接验证单词(最直接)

kbbi库在查询不存在的单词时会抛出KBBIError异常,我们可以利用这一点判断单词是否属于词典:

from kbbi import KBBI, KBBIError
import pandas as pd

# 定义单词有效性检查函数
def is_valid_kbbi_word(word):
    try:
        # 尝试创建KBBI实例,成功则说明单词有效
        KBBI(word)
        return True
    except KBBIError:
        # 抛出异常则说明单词不在词典中
        return False

def remove_typo(text):
    # 过滤出有效单词
    return [word for word in text if is_valid_kbbi_word(word)]

# 应用到DataFrame
df['after'] = df['before'].apply(remove_typo)

这个方案不需要额外预处理,直接调用库的查询逻辑,能准确匹配kbbi库的词汇范围,比如你示例中的alhmdllh会被正确识别为有效词汇。

方案二:预加载词典到集合(适合大数据集)

如果你的评论数据集很大,频繁调用KBBI()实例化会影响性能。可以先将KBBI词典导出为本地TXT文件(每行一个单词),然后加载为集合,通过集合的O(1)查询提升效率:

步骤1:准备KBBI词汇文件

假设你已经将所有KBBI词汇导出到kbbi_words.txt文件(每行一个单词)。

步骤2:加载并过滤

import pandas as pd

# 预加载词典到集合
with open('kbbi_words.txt', 'r', encoding='utf-8') as f:
    kbbi_words = set(word.strip() for word in f)

def remove_typo(text):
    return [word for word in text if word in kbbi_words]

# 应用到DataFrame
df['after'] = df['before'].apply(remove_typo)

这种方式查询速度远快于方案一,适合处理大规模数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:20:38