当前位置:   article > 正文

nlp入门之spacy工具包的使用

nlp入门之spacy工具包的使用

源码请到:自然语言处理练习: 学习自然语言处理时候写的一些代码 (gitee.com)

四、spacy工具包的使用

4.1 spacy工具包安装

spacy工具包宣称可以做到nltk做到的所有事情,并且速度更快,还更好的适配深度学习,最关键的是提供了中文语言模型!!

由于某些不可说的原因,使用官网的安装方式很难成功推荐直接使用conda内部的整合包

运行

  1. conda install spacy
  2. conda install -c conda-forge spacy-model-en_core_web_sm

就可以安装成功了

如果不成功可以网上寻找spacy的离线安装包,可以参考这篇文章

安装spaCy(最简单的教程)_spacy安装_御用厨师的博客-CSDN博客

4.2 加载模型

可以自行选择安装需要的模型,然后使用命令加载,我这里使用英文模型做示范

示例:

  1. # 加载模型
  2. nlp = spacy.load("en_core_web_sm")

4.3 分词

spacy同样可以做到分词

示例:

  1. # 加载语料
  2. doc = nlp('Weather is good, very windy and sunny. We have no classes in the afternoon')
  3. # 分词
  4. for token in doc:
  5. print(token)

 4.4 分句

spacy还提供了分句功能

示例:

  1. # 分句
  2. for sent in doc.sents:
  3. print(sent)

 4.5 词性

spacy和nltk一样提供了分析词性的功能

示例:

  1. # 词性
  2. for token in doc:
  3. print('{}-{}'.format(token, token.pos_))

 词性对照表可以参考

SpaCy词性对照表 - 知乎 (zhihu.com)

4.6 命名体识别

spacy也提供了命名体识别功能

示例:

  1. # 命名体识别
  2. doc_2 = nlp("I went to Paris where I met my old friend Jack from uni")
  3. for ent in doc_2.ents:
  4. print('{}-{}'.format(ent, ent.label_))

还可以将结果进行可视化展示

  1. # 展示
  2. doc = nlp("I went to Paris where I met my old friend Jack from uni")
  3. svg = displacy.render(doc, style='ent')
  4. output_path = Path(os.path.join("./", "sentence.html"))
  5. output_path.open('w', encoding="utf-8").write(svg)

 4.7 找出书中所有人物的名字

以傲慢与偏见为语料,做一个找出所有人物名字的实战示例

示例:

  1. # 找到书中所有人物名字
  2. def read_file(file_name):
  3. with open(file_name, 'r') as f:
  4. return f.read()
  5. text = read_file(os.path.join('./', 'data/Pride and Prejudice.txt'))
  6. processed_text = nlp(text)
  7. sentences = [s for s in processed_text.sents]
  8. print(len(sentences))
  9. print(sentences[:5])
  10. def find_person(doc):
  11. c = Counter()
  12. for ent in doc.ents:
  13. if ent.label_ == 'PERSON':
  14. c[ent.lemma_] += 1
  15. return c.most_common(10)
  16. print(find_person(processed_text))

 4.8 恐怖袭击分析

根据世界反恐怖组织官网上下载的恐怖袭击事件,来分析特定的组织在特定的地点作案的次数

示例:

  1. # 恐怖袭击分析
  2. def read_file_to_list(file_name):
  3. with open(file_name, 'r') as f:
  4. return f.readlines()
  5. terrorist_articles = read_file_to_list(os.path.join('./', 'data/rand-terrorism-dataset.txt'))
  6. print(terrorist_articles[:5])
  7. terrorist_articles_nlp = [nlp(art.lower()) for art in terrorist_articles]
  8. common_terrorist_groups = [
  9. 'taliban',
  10. 'al-qaeda',
  11. 'hamas',
  12. 'fatah',
  13. 'plo',
  14. 'bilad al-rafidayn'
  15. ]
  16. commmon_locations = [
  17. 'iraq',
  18. 'baghdad',
  19. 'kirkuk',
  20. 'mosul',
  21. 'afghanistan',
  22. 'kabul',
  23. 'basra',
  24. 'palestine',
  25. 'gaza',
  26. 'israel',
  27. 'istanbul',
  28. 'beirut',
  29. 'pakistan'
  30. ]
  31. location_entity_dict = defaultdict(Counter)
  32. for article in terrorist_articles_nlp:
  33. article_terrorist_groups = [ent.lemma_ for ent in article.ents if ent.label_ == 'PERSON' or ent.label_ == "ORG"]
  34. article_locations = [ent.lemma_ for ent in article.ents if ent.label_ == 'GPE']
  35. terrorist_common = [ent for ent in article_terrorist_groups if ent in common_terrorist_groups]
  36. location_common = [ent for ent in article_locations if ent in commmon_locations]
  37. for found_entity in terrorist_common:
  38. for found_location in location_common:
  39. location_entity_dict[found_entity][found_location] += 1
  40. print(location_entity_dict)
  41. location_entity_df = pd.DataFrame.from_dict(dict(location_entity_dict), dtype=int)
  42. location_entity_df = location_entity_df.fillna(value=0).astype(int)
  43. print(location_entity_df)
  44. plt.figure(figsize=(12, 10))
  45. hmap = sns.heatmap(location_entity_df, annot=True, fmt='d', cmap='YlGnBu', cbar=False)
  46. plt.title("Global Incidents by Terrorist group")
  47. plt.xticks(rotation=30)
  48. plt.show()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/617397
推荐阅读
相关标签
  

闽ICP备14008679号