当前位置:   article > 正文

自然语言处理:使用NLTK库进行文本分析_nltk如何对中文文本进行分析

nltk如何对中文文本进行分析

Python的NLTK(Natural Language Toolkit)库为语言处理提供了强大的工具和资源。本学习笔记将通过一个实际的例子,介绍如何使用NLTK进行基本的文本分析任务。

  1. # 导入NLTK库的必要组件
  2. import nltk
  3. from nltk.tokenize import word_tokenize # 分词
  4. from nltk.corpus import stopwords # 获取停用词列表
  5. from nltk import pos_tag # 进行词性标注
  6. from nltk.chunk import RegexpChunkParser # 创建正则表达式分块解析器
  7. from nltk import ne_chunk # 命名实体识别
  1. # 分析的文本字符串
  2. mystring = 'Its informal conversational style would make interaction comfortable, and yet the machine would remain slightly unpredictable and therefore interesting.'
  3. # 对文本进行分词处理
  4. tokens = word_tokenize(mystring)
  5. # 将分词结果转换为小写,以便统一处理
  6. tokens = [word.lower() for word in tokens]
  7. # 将分词结果转换为集合,以去除重复的词汇
  8. tokens_set = set(tokens)
  9. # 过滤掉分词结果中的停用词
  10. filtered_words = [w for w in tokens_set if(w not in stopwords.words('english'))]
  11. # 对过滤后的词汇进行词性标注
  12. tags = pos_tag(filtered_words)

此时tags为下面的列表:

[('remain', 'NN'),
 ('.', '.'),
 ('slightly', 'RB'),
 ('informal', 'JJ'),
 ('yet', 'RB'),
 ('would', 'MD'),
 ('interaction', 'VB'),
 ('conversational', 'JJ'),
 ('style', 'NN'),
 ('machine', 'NN'),
 ('interesting', 'VBG'),
 ('unpredictable', 'JJ'),
 (',', ','),
 ('therefore', 'RB'),
 ('make', 'VBP'),
 ('comfortable', 'JJ')]

各个词性的含义参照下表:

  1. '''
  2. NN: 名词 (Noun)
  3. NNS: 复数名词 (Noun, plural)
  4. NNP: 专有名词 (Proper noun, singular)
  5. NNPS: 复数专有名词 (Proper noun, plural)
  6. PRP: 人称代词 (Personal pronoun)
  7. PRP$: 物主代词 (Possessive pronoun)
  8. RB: 副词 (Adverb)
  9. RBR: 比较级副词 (Adverb, comparative)
  10. RBS: 最高级副词 (Adverb, superlative)
  11. VB: 动词原形 (Verb, base form)
  12. VBD: 动词过去式 (Verb, past tense)
  13. VBG: 现在分词 (Verb, gerund or present participle)
  14. VBN: 过去分词 (Verb, past participle)
  15. VBP: 动词非第三人称单数现在时 (Verb, non-3rd person singular present)
  16. VBZ: 动词第三人称单数现在时 (Verb, 3rd person singular present)
  17. JJ: 形容词 (Adjective)
  18. JJR: 比较级形容词 (Adjective, comparative)
  19. JJS: 最高级形容词 (Adjective, superlative)
  20. DT: 限定词 (Determiner)
  21. CC: 连词 (Coordinating conjunction)
  22. IN: 介词或从属连词 (Preposition or subordinating conjunction)
  23. MD: 情态动词 (Modal)
  24. CD: 基数 (Cardinal number)
  25. EX: 存在量词 (Existential there)
  26. FW: 外来词 (Foreign word)
  27. POS: 所有格结束词 (Possessive ending)
  28. RP: 小品词 (Particle)
  29. SYM: 符号 (Symbol)
  30. TO: "to" 作为介词或不定式标记 (to)
  31. WDT: wh-限定词 (Wh-determiner)
  32. WP: wh-代词 (Wh-pronoun)
  33. WP$: wh-物主代词 (Possessive wh-pronoun)
  34. WRB: wh-副词 (Wh-adverb)
  35. '''
  1. # 定义句子结构的语法规则
  2. grammar = "NP: {<DT>?<JJ>*<NN>}"
  3. # 创建一个句子对象,用于解析
  4. sentence = nltk.sent_tokenize(mystring)[0]
  5. # 使用上面定义的语法规则,创建一个正则表达式分块解析器
  6. cp = nltk.RegexpParser(grammar)
  7. # 解析句子,生成一个树结构
  8. result = cp.parse(tags)
  9. # 打印解析结果
  10. print(result)
  11. # 绘制树结构
  12. result.draw()

绘制出来的树:

  1. # 进行命名实体识别的另一个示例
  2. sentence = 'Ada went to Wuhan University today'
  3. # 打印命名实体识别的结果
  4. print(ne_chunk(pos_tag(word_tokenize(sentence))))

结果:

(S
  (PERSON Ada/NNP)
  went/VBD
  to/TO
  (PERSON Wuhan/NNP University/NNP)
  today/NN)

spaCy库也有类似的功能,且识别更准确,可参考另一篇文章:自然语言处理:Python的spaCy库及文章人名统计

NLTK作为一个功能强大的语言处理工具,为我们提供了探索语言的丰富资源和方法。随着技术的深入,我们期待解锁更多自然语言处理的秘密,开启语言和计算机之间更深层次的交流。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号