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

读取NLTK语料库时如何完整保留或还原缩写与缩略形式?

解决NLTK语料库分词时缩写被拆分的问题

方法一:改用智能分词器保留缩写整体

NLTK自带的words()方法仅按空白和标点简单拆分,会把带标点的缩写拆碎。可以替换为nltk.tokenize.word_tokenize(),它能识别常见缩写(如U.S.、I'm)并保留为整体:

先导入并准备必要模块:

import nltk
from nltk.tokenize import word_tokenize
# 首次使用需下载分词模型
nltk.download('punkt')

修改你的读取函数:

START_TOKEN = "<START>"
END_TOKEN = "<END>"

def read_corpus(package, category):
    """ Read files from corpus(package)'s category.
        Params:
            package (nltk.corpus): corpus
            category (string): category name
        Return:
            list of lists, with words from each of the processed files assigned with start and end tokens
    """
    files = package.fileids(category)
    corpus = []
    for f in files:
        # 读取原始文本而非直接调用words()
        raw_text = package.raw(f)
        # 用word_tokenize分词,自动保留缩写整体
        tokens = word_tokenize(raw_text)
        # 转小写并添加起止标记
        processed_tokens = [START_TOKEN] + [w.lower() for w in tokens] + [END_TOKEN]
        corpus.append(processed_tokens)
    return corpus

测试后,U.S.会被处理为"u.s.",I'm会变成"i'm",均作为单个元素保留。

方法二:还原缩写为完整形式(可选)

如果需要把缩写转换成完整表达(比如I'm→I am,U.S.→United States),可以用以下两种方式:

手动映射表方式

适合处理常见缩写,灵活性强:

abbrev_map = {
    "i'm": "i am",
    "u.s.": "united states",
    "don't": "do not",
    # 可按需添加更多缩写映射
}

def read_corpus_with_expansion(package, category):
    files = package.fileids(category)
    corpus = []
    for f in files:
        raw_text = package.raw(f)
        tokens = word_tokenize(raw_text)
        processed_tokens = [START_TOKEN]
        for token in tokens:
            lower_token = token.lower()
            # 匹配到映射则替换,否则保留原小写形式
            processed_tokens.append(abbrev_map.get(lower_token, lower_token))
        processed_tokens.append(END_TOKEN)
        corpus.append(processed_tokens)
    return corpus

工具库自动还原方式

如果有大量缩写需要处理,可使用contractions库(需先安装:pip install contractions),它能自动还原大部分英语缩写:

import contractions

def read_corpus_with_expansion(package, category):
    files = package.fileids(category)
    corpus = []
    for f in files:
        raw_text = package.raw(f)
        # 先还原缩写,再分词
        expanded_text = contractions.fix(raw_text)
        tokens = word_tokenize(expanded_text)
        processed_tokens = [START_TOKEN] + [w.lower() for w in tokens] + [END_TOKEN]
        corpus.append(processed_tokens)
    return corpus

注:这类工具对U.S.这类专有名词缩写的还原效果有限,仍需手动补充映射表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:55:18