赞
踩
指定好匹配的模式-pattern
选择相应的方法-match,search等
得到匹配结果-group
re.match #从开始位置开始匹配,如果开头没有则无
re.search #搜索整个字符串
re.findall #搜索整个字符串,返回一个list
将两个规则并列起来,以‘ | ’连接,表示只要满足其中之一就可以匹配。
正则式可以匹配不定长的字符串
它们的返回不是一个简单的字符串列表,而是一个 MatchObject,可以得到更多的信息。
如果匹配不成功,它们则返回一个 NoneType 。所以在对匹配完的结果进行操作之前,必需先判断一下是否匹配成功了。
match 从字符串的开头开始匹配,如果开头位置没有匹配成功,就算失败了;而 search 会跳过开头,继续向后寻找是否有匹配的字符串。
在目标字符串中规格规则查找匹配的字符串,再把它们替换成指定的字符串。你可以指定一个最多替换次数,否则将替换所有的匹配到的字符串。
sub ( rule , replace , target [,count] )
subn(rule , replace , target [,count] )
第一个参数是正则规则,第二个参数是指定的用来替换的字符串,第三个参数是目标字符串,第四个参数是最多替换次数。
sub 返回一个被替换的字符串
subn 返回一个元组,第一个元素是被替换的字符串,第二个元素是一个数字,表明产生了多少次替换。
使用指定的正则规则在目标字符串中查找匹配的字符串,用它们作为分界,把字符串切片。
split( rule , target [,maxsplit] )
第一个参数是正则规则,第二个参数是目标字符串,第三个参数是最多切片次数,返回一个被切完的子字符串的列表
<…>’ 里面是你给这个组起的名字,
例子:
非常实用的文本处理工具,主要用于英文数据,历史悠久~
创建一个Text对象,方便后续操作
NLTK中的词性标注模块提供了不同的标注器,其中最常见的是基于统计模型的标注器和基于规则的标注器。这些标注器使用已标注的语料库(通常是已知词性的文本集合)来学习单词与其词性之间的关系。
在这个例子中,用 NLTK 的分块功能,你通过正则表达式规则定义了一个名为 "MY_NP" 的块,用来匹配形容词(JJ)和名词(NN)的组合,可以包含冠词(DT)。
然后,通过 nltk.RegexpParser(grammer)
创建了一个分块器,根据你的规则对输入的句子进行分块。最后,使用 cp.parse(sentence)
对句子进行分块处理,得到一个分块树。
在输出中,可以看到分块的结果,形成了一个树状结构,其中 "MY_NP" 标记了被识别的名词短语。而 result.draw()
用于可视化这个分块树。
这种分块技术在自然语言处理中常用于提取文本中的结构化信息,例如识别名词短语、动词短语等,有助于理解文本的语法结构。
命名实体识别(NER)是一项文本处理任务,旨在识别文本中具有特定意义的命名实体,如人名、地名、组织机构名等。NLTK 提供了 nltk.chunk
模块,其中包含了用于实现命名实体识别的工具。常见的方法是使用 NER 器,它是一个训练有素的模型,能够自动标识文本中的命名实体。有助于理解文本中实体的角色和关系。
NLTK 中的一个流行的NER工具是 nltk.ne_chunk
,它基于最大熵分类器,并使用预训练的模型。需要注意的是,NER的性能取决于底层使用的模型和训练数据,因此在特定应用中可能需要进行调整或替换。
清洗文本是为了准备数据,使其更适合用于自然语言处理任务,比如文本分析或机器学习模型的训练。以下是清洗步骤的简要概括:
去掉HTML标签和特殊实体: 使用正则表达式去掉文本中的HTML标签和一些特殊实体,如@mentions和#hashtags。
去掉价值符号: 去掉文本中的一些特殊符号,例如股票代码($TSLA)。
去掉超链接: 去掉文本中的超链接。
去掉专门名词缩写: 去掉文本中长度较短的专有名词,通常是为了去除一些无关紧要的信息。
去掉多余空格: 去掉文本中的多余空格。
分词: 使用NLTK的word_tokenize
函数对文本进行分词,将文本拆分成单词。
去停用词: 去掉停用词,即在文本中频繁出现但通常没有实际意义的词语,如“the”、“and”等。
组合结果: 将处理后的单词列表组合成清洗后的文本。
spaCy · Industrial-strength Natural Language Processing in Python
spacy的语言模型下载教程http://t.csdnimg.cn/bDLT5
当使用 spaCy 处理文档时,有许多方便的属性和方法可供使用。以下是一些示例:
遍历文档中的 Token:
for token in doc:
允许你迭代文档中的每个 Token。遍历文档中的 Sentence:
for sent in doc.sents:
允许你迭代文档中的每个 Sentence。获取 Token 的词性标注:
token.pos_
提供了 Token 的词性标注信息。获取 Token 的依存关系:
token.dep_
提供了 Token 与其父节点之间的依存关系。获取 Token 是否是停用词:
token.is_stop
返回一个布尔值,表示 Token 是否是停用词。调用 doc.ents
时,你实际上是在获取 spaCy 文档中识别到的实体的生成器(generator)。ents
是一个 spaCy 文档对象的属性,它包含了文档中识别到的所有命名实体。
具体而言,.ents
返回的是一个生成器,你可以通过迭代它来访问每个实体对象。每个实体对象都有一些属性,最常用的是:
ent.text
: 包含实体文本的属性。ent.start_char
和 ent.end_char
: 分别表示实体在文档中的起始和结束字符索引。ent.label_
: 表示实体的标签,表示实体的类型(如“PERSON”、“GPE”等)。ent.lemma_
: 表示实体的标准形式,即它的基本形式。 spaCy 的可视化工具 displacy
,通过 displacy.render
方法对实体进行可视化呈现,使用不同颜色的边框来突显不同类型的实体,从而直观地展示文本中实体的位置和类型。
找到书中所有人物名字
processed_text.ents
: 这是spaCy文档对象的属性,包含从文本中提取的所有命名实体。在这里,代码遍历这些实体。
ent.label_
: 对于每个实体,ent.label_
表示实体的标签,即实体的类型。在这里,代码检查实体是否为人物,通过比较 ent.label_
是否等于 'PERSON'
。
ent.lemma_
: 表示实体的标准形式,即它的基本形式。在这里,代码使用 ent.lemma_
获取人物名字的标准形式。
Counter
类: 这是 Python 的标准库中的一个类,用于计数可哈希对象的出现次数。在这里,代码使用 Counter
来统计每个人物名字的出现次数。
c.most_common(10)
: 这是 Counter
类的方法,用于返回出现次数最多的前 10 个元素。在这里,代码返回出现频率最高的前 10 个人物名字和它们的出现次数。
terrorism_articles_nlp = [...]
: 这行代码创建了一个列表 terrorism_articles_nlp
,用于存储每篇文章的 spaCy 文档对象。
for art in terrorism_articles:
: 这是一个循环,遍历 terrorism_articles
列表中的每一篇文章。
nlp(art)
: 对每篇文章应用 spaCy 的 NLP 流水线。nlp
是 spaCy 加载的自然语言处理模型,它将文本转换成 spaCy 文档对象。每个处理过的文章(文档对象)都会被添加到 terrorism_articles_nlp
列表中。
location_entity_dict = defaultdict(Counter)
: 这行代码创建了一个嵌套字典,其中的默认值是一个 Counter
对象。location_entity_dict
的键是实体(人物或组织),值是一个 Counter
对象,表示该实体与不同地理位置的关联次数。
for article in terrorism_articles_nlp:
: 这是一个循环,遍历 terrorism_articles_nlp
列表中的每一篇处理过的恐怖袭击文章。
article_terrorist_groups
和 article_locations
: 这两行代码使用列表推导式从当前文章中提取人物/组织和地理位置的实体。它们分别将这些实体的标准形式存储在 article_terrorist_groups
和 article_locations
列表中。
terrorist_common
和 locations_common
: 这两行代码通过筛选,仅保留在常见恐怖组织和地理位置列表中的实体。这可以通过事先定义的 common_terrorist_groups
和 common_locations
列表来完成。
for found_entity in terrorist_common:
和 for found_location in locations_common:
: 这两个嵌套的循环遍历每个匹配的恐怖组织和地理位置,然后在 location_entity_dict
中更新关联次数。如果该实体和位置的组合不存在,会自动创建相应的键和计数器。
hmap = sns.heatmap(location_entity_df, annot=True, fmt='d', cmap='YlGnBu', cbar=False)
: 这是核心的绘图代码。它使用 seaborn
的 heatmap
函数绘制热力图。location_entity_df
是一个数据框,其中包含了恐怖组织和地理位置之间的关联次数。参数 annot=True
表示在热力图中显示数值,fmt='d'
指定了数值的格式,cmap='YlGnBu'
设置了颜色映射,cbar=False
表示不显示颜色条。
- import jieba
- from wordcloud import WordCloud
- from imageio import imread
- from collections import Counter
- import matplotlib.pyplot as plt
-
- data={}
-
- text_file = open('./data/19Congress.txt','r',encoding='utf-8')
- text = text_file.read()
- with open('./data/stopwords.txt',encoding='utf-8') as file:
- stopwords = {line.strip() for line in file}
-
- seg_list = jieba.cut(text, cut_all=False)
- for word in seg_list:
- if len(word)>=2:
- if not data.__contains__(word):
- data[word]=0
- data[word]+=1
- #print(data)
-
- my_wordcloud = WordCloud(
- background_color='white', #设置背景颜色
- max_words=400, #设置最大实现的字数
- font_path=r'./data/SimHei.ttf', #设置字体格式,如不设置显示不了中文
- mask=imread('./data/mapofChina.jpg'), #指定在什么图片上画
- width=1000,
- height=1000,
- stopwords = stopwords
- ).generate_from_frequencies(data)
-
- plt.figure(figsize=(18,16))
- plt.imshow(my_wordcloud)
- plt.axis('off')
- plt.show() # 展示词云
- my_wordcloud.to_file('result.jpg')
- text_file.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。