python nltk —— 文本预处理

本文介绍使用NLTK进行文本处理的基础知识,包括语法标记、语料库操作、词干提取与词形归一化等技术,并展示了如何进行词性标注及停用词处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 下载:

    import nltk
    nltk.download()
    

0. 语法知识

  • N:名词, V:动词,ADJ:形容词,ADV:副词,
    • proper noun:专有名词
    • pronoun:代词,he/her/I/their
  • CNJ:连词,and/or/but/if/while/although
  • DET:determiner,限定词,the/a/some/most/every/no
  • EX:existential,there/there’s
  • MOD:情态动词,UH:Interjection,情态动词;
  • VD:past tense,VG:现在时,VN:完成时

1. 语料库的查看

  • brown:布朗语料库;

  • categories:分类

  • stents:句子

  • words:单词

    >> from nltk.corpus import brown
    # 文本类型
    >> brown.categories()
    ['adventure', 'belles_lettres', 'editorial',
    'fiction', 'government', 'hobbies', 'humor',
    'learned', 'lore', 'mystery', 'news', 'religion',
    'reviews', 'romance', 'science_fiction']
    
    >> len(brown.sents())
    57340
    >> len(brown.words())
    1161192
    

2. 词干提取与词形归一

  • 词干提取(Stemming):walking ⇒ walk;walked ⇒ walk

    from nltk.stem import PorterStemmer, LancasterStemmer, SnowballStemmer
    porter_stem = PorterStemmer()
    porter_stem.stem('walking')
    
  • 词形归一(Lemmatization):went ⇒ go;are ⇒ be

    from nltk.stem import WordNetLemmatizer
    lemma = WordNetLemmatizer()
    lemma.lemmatize('dogs')
    

    注意词性的问题,不指定 POS,默认是名词

    >> lemma.lemmatize('went')
    'went'
    >> lemma.lemmatize('went', pos='v')
    'go'
    >> lemma.lemmatize('are', pos='v')
    'be'				# be 动词也是动词
    

3. pos tags 与 stopwords

  • pos tags

    words = nltk.word_tokenize('what does the fox say')
    nltk.pos_tags(words)
    [('what', 'WDT'), ('does', 'VBZ'), ('the', 'DT'), ('fox', 'NNS'), ('say', 'VBP')]
    
  • stopwords

    from nltk.corpus import stopwords
    stopwords.words('english')
    

    stopwords 支持的语言:

    ['dutch',
     'german',
     'hungarian',
     'romanian',
     'kazakh',
     'turkish',
     'russian',
     'README',
     'italian',
     'english',
     'greek',
     'norwegian',
     'portuguese',
     'finnish',
     'danish',
     'french',
     'swedish',
     'azerbaijani',
     'spanish',
     'indonesian',
     'arabic',
     'nepali']
    

4. 文本处理 pipeline

Ollama 并不是一个广为人知的标准工具或库,特别是在文本预处理领域。可能是您指的是一种特定的内部工具或者是某种新型技术,但在公开资料中并没有广泛提及名为 Ollama 的工具用于文本预处理的信息。 不过,如果我们假设这是一个误解,并且您的目的是了解如何使用某些流行的数据科学和自然语言处理(NLP)工具来进行文本预处理的话,我可以为您提供一些常见的方法和技术栈介绍。以下是基于 Python 和 Java 生态系统中的一些常用工具来进行文本预处理的方式: ### 使用Python进行文本预处理 如果您考虑的是类似于 `spaCy` 或者 `NLTK` 这样的Python库,它们是非常强大的文本预处理工具。下面是一些基本步骤以及对应的代码片段: 1. **安装依赖**: ```bash pip install spacy nltk hanlp python -m spacy download zh_core_web_sm ``` 2. **导入所需的库并加载资源**: ```python import jieba import re from sklearn.feature_extraction.text import TfidfVectorizer # 加载 spaCy 模型 import spacy nlp = spacy.load('zh_core_web_sm') def clean_text(text): text = re.sub(r'[^\w\s]', '', text) return ' '.join(jieba.cut(text)) ``` 3. **执行具体的文本清洗任务**: ```python raw_data = ["你好世界", "我喜欢吃苹果"] cleaned_texts = [clean_text(d) for d in raw_data] print(cleaned_texts) docs = list(nlp.pipe(cleaned_texts)) tokenized_docs = [[token.lemma_ for token in doc] for doc in docs] vectorizer = TfidfVectorizer() X = vectorizer.fit_transform([' '.join(doc) for doc in tokenized_docs]) print(X.toarray()) ``` ### 使用Java进行文本预处理 如果偏好于Java环境,则可以选择像 Apache OpenNLP 或者 HanLP 等成熟的解决方案来做这项工作: 1. **Maven配置添加依赖项** ```xml <dependency> <groupId>com.hankcs</groupId> <artifactId>HanLP</artifactId> <version>LATEST_VERSION_HERE</version> </dependency> ``` 2. **编写预处理器代码** ```java import com.hankcs.hanlp.HanLP; import java.util.List; public class TextPreprocessor { public static void main(String[] args) { String inputText = "这是需要被清理的文字内容"; // 分词及去除标点符号等功能可以在接下来的操作里实现 List<String> segmentedWords = segmentAndClean(inputText); System.out.println(segmentedWords.toString()); } private static List<String> segmentAndClean(String text) { // 调用 HanLP 提供的功能对输入文本进行分词等处理... return HanLP.segment(text).stream().map(term -> term.word.replaceAll("[^\\u4E00-\\u9FA5]", "")).filter(s->!s.isEmpty()).toList(); } } ``` 上述例子展示了在两个不同平台上如何开始着手解决同样的问题——即文本预处理。每个平台都有其优势所在;对于快速原型设计来说,Python 更适合初学者入门并且拥有丰富的社区支持;而当项目涉及到大型企业级应用时,则可能会倾向于采用稳定可靠的 JVM 技术堆栈如 Java 来完成此类任务。 若确实有名为“Ollama”的专用文本预处理工具,请提供更多背景信息以便我能给出针对性更强的帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值