正则表达式

  1. 正则表达式使用某种预定义的模式 匹配 具有共同特征的字符串;主要用于处理字符串。完成复杂的查找、替换等要求
  2. 对字符串和特殊字符操作的逻辑公式
  3. 单个字符串描述匹配一系列复合某个句法规则的字符串

搜索过程

拿出表达式和文本中字符比较,若每个字符可成功匹配,则返回成功,反之返回失败。存在多个匹配项则按照搜索设定返回全部或部分返回。

可以使用python中的re模块来进行操作功能

import re
a = re.findall("匹配规则","要匹配的字符串")

正则表达式的一些规则

符号 作用
[] 匹配"[]"中的任意一个字符
^ ^在方框中表示 ”非后面字符开头,在方框外表示以后面字符开头“
$ 以前面字符结尾
? ?表示迁至字符或者无
* *表示前置字符出现0次或者多次
+ +表示前置字符出现1次或者多次
. .表示任意一个字符的通配符
.* .*表示任意字符串
| 表示与前者或者后者匹配
() 用于分组or提高优先级
# 匹配字符串
r = 'wood'
ans = re.search(r, "what's woodchuks")
print(ans) # <re.Match object; span=(7, 11), match='wood'>

[]

# 匹配【】中所有字符
r = '[Ww]ood'
ans = re.search(r, "Woodchunks and woodchuks")
print(ans) # <re.Match object; span=(0, 4), match='Wood'>r = '[1-9]'
ans = re.search(r,"is it 012?")
print(ans)# <re.Match object; span=(7, 8), match='1'>

^

# ^的用法
r = '[^A-Za]' #放在方框内,表示非后面的字符开头
ans = re.search(r, 'ABCDabc')
print(ans)# <re.Match object; span=(5, 6), match='b'>

?

# ?的用法
r = 'woodchucks?' #?前置的第一个字符或者无,这里只考虑s
ans = re.search(r, 'woodchuck and woodchucks')
print(ans)# <re.Match object; span=(5, 6), match='b'>

*

# *表示前置字符出现0或多次
r = 'ba*'
text = "bba1 bba@ bbaaa ba?!@3"
ans = re.finditer(r, text)
print(ans)
for i in ans:print("%s exists between %d and %d" % (i, i.start(), i.end()))
"""<re.Match object; span=(0, 1), match='b'> exists between 0 and 1<re.Match object; span=(1, 3), match='ba'> exists between 1 and 3<re.Match object; span=(5, 6), match='b'> exists between 5 and 6<re.Match object; span=(6, 8), match='ba'> exists between 6 and 8<re.Match object; span=(10, 11), match='b'> exists between 10 and 11      <re.Match object; span=(11, 15), match='baaa'> exists between 11 and 15   <re.Match object; span=(16, 18), match='ba'> exists between 16 and 18
"""

+

r = 'ba+'
text = "a1 ba@ baaa b?!@3"
ans = re.finditer(r, text)
print(ans)
for i in ans:print("%s exists between %d and %d" % (i, i.start(), i.end()))
"""<re.Match object; span=(3, 5), match='ba'> exists between 3 and 5<re.Match object; span=(7, 11), match='baaa'> exists between 7 and 11
"""

^与$在括号外表示首尾

# ^放在【】外,表示以【】内部字符开头
# $表示以前面字符结尾
r = '^[a-z].*e$' #以小写字母开头,e作为结尾
ans = re.search(r, "jam Slade")
print(ans)

优先级

优先级由高到低,Counters 类型比 Sequences and anchors 具有更高的优先级,Sequences and anchors 的优先级高于 disjunction。

类型 符号
Parenthesis ()
Counters *+? {}
Sequences and anchors ^ $
Disjunction |

匹配选择贪婪策略,例如,/[a-z]*/,0次或者多次,然而,正则表达式
匹配最大字符串

匹配

单个字符

character function
. 匹配除了换行符的所有字符
[] 匹配[]中所有字符
\d 匹配数字0-9
\D 匹配非数字
\s 匹配空白,tab与空格
\S 匹配非空白
\w 单词字符,等价于a-z A-Z 0-9
\W 非单词字符,\w的补集
* 匹配前一个字符出现0次或者多次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符0或1次
{m} 匹配前一个字符出现m次
{m,} 匹配前一个字符至少m次
{m,n} 匹配字符出现m到n次(n>=m)
^ 字符串开头
$ 字符串结尾

re提供方法

函数 作用
compile (pattern) 创建模式对象,根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换pattern=re.compile(r’[,./\\?[]\|]’) pattern.split(text)
match(pattern,string) 从字符串开始处匹配模式,返回match对象或者None,或者compile对象的.match(“要匹配的字符串”)
group():result.group() 提取匹配对象的字符串信息
split(pattern,string) 根据模式匹配项分割字符串
sub(pattern,repl,string) 将字符串中所有pat的匹配项用repl替换,返回新字符串
findall(pattern,string) 列出字符串中模式的所有匹配项

文本标记化

字符序列换位标记token序列的过程
词法分析器会对标记分类

  1. 类型:词汇表中的一个词
  2. 标记: 文本中的此

词典和序列
N = 标记个数 V = 词表中类型的个数 ∣ V ∣ : 词表的大小 N = 标记个数\\V=词表中类型的个数\\|V|:词表的大小 N=标记个数V=词表中类型的个数∣V∣:词表的大小

文本标记化
分句

使用sent_tokenize

import nltk.tokenize as tk
doc = "How are you? Not bad, what about you? OK."
# 按句拆分,首字母大写,结尾是否有标点
tokens = tk.sent_tokenize(doc)
for i, token in enumerate(tokens):print("%2" $ (i+1), token)

分词
使用word_tokenize

tokens = tk.word_tokenize(doc)
tokenizer = tk.WordPunctTokenizer()
tokens = tokenizer.tokenize(doc)
for i, token in enumerate(tokens):print("%2" $ (i+1), token)

词干提取和词形还原

词干提取 stemming:am,is,was,been 转化为 be
抽取词的词干或词根形式
leave -> leav

词形还原 lemmatization:plays, played, playing 转化为 play
把一个词汇还原成一般形式,leave => leaf

词干提取

可以使用nltk.stem下的porter,lancaster,snowball库·

porter.PorterStemmer().stem(token)
lancaster.LancasterStemmer().stem(token)
snowball.SnowballStemmer().stem(token)

词形还原

使用nltk.stem

ns.Word.NetLemmatizer()
#有lemmatizer.lemmatizer()函数,第一个放tokne,第二个pos-‘v’表示动词,='n'表示名词

预处理过程

import re
f = open(r"path", 'r')# 非数字字符符号变为空且字符全小写
pattern = re.compile("[^a-zA-Z0-9\n]")
data = re.sub(pattern, "",date).lower()# 统计单词词频
import nltk
tokens = nltk.word_tokenize(data) #文本标记化
from nltk.corpus import stopwords
tokens = [w for w in tkens if (w not in stopwords.wors('english)] #去停用词
tokens_pos = tk.pos_tag(tokens) #词性标注from nltk.stem.porter import PorterStemmer
result.append(PorterStemmer().stem(token))#词干提取import nltk.stem as ns
lemmatizer = ns.WordNetLemmatizer()
result.append(lemmatizer.lemmatize(token, pos=postag))# 词形还原from collections import Counter
Counter(result).most_common(100)
统计排序

中文分词

基于规律:词典

  1. 完全切分
  2. 正向最长匹配
  3. 逆向最长匹配
  4. 双向最长匹配
  5. 最短路径

基于统计

  1. 最大概率
  2. 字标注

评价标准:

  1. 大颗粒度词越多越好
  2. 非词典词和单字词越少越好

结巴分词
支持正、逆、双向三种分词模式

  1. 全模式 句子中所有可以构成词的词语扫描出来,但不解决歧义
  2. 精确模式: 将句子精确分开
  3. 搜索引擎:精确模式基础上,对长词再次划分提高召回率
import jieba
jieba.cut(text, cut_all = Ture)#全模式
jieba.cut(text, cut_all = False)# 精确模式
# cut_all默认是False
jieba.cut_for_search(text) # 搜索引擎

自然语言表达处理笔记01—— 1.正则表达式 2.文本标记化 3.词干提取和词形还原 4.中文分词相关推荐

  1. 自然语言处理——词性标注、词干提取、词形还原

    目录 词性标注 方法 工具 实例 词干提取和词形还原 算法 步骤 词性标注 一般而言,文本里的动词可能比较重要,而助词可能不太重要: 我今天真好看 我今天真好看啊 甚至有时候同一个词有着不同的意思: ...

  2. 「自然语言处理(NLP)」入门系列(三)单词表示、损失优化、文本标记化?

    来源:AINLPer微信公众号(点击了解一下吧) 编辑: ShuYini 校稿: ShuYini 时间: 2020-01-09 本次主要内容: 1.知道词向量如何表示单词意思 2.如何可视化词向量 3 ...

  3. mmdetection 使用笔记 01: 安装与简单的推理demo

    mmdetection 使用笔记 01: 安装与简单的推理demo mmdetection是来自商汤和港中文联合实验室openmmlab推出的目标检测工具包,与其同系列的还有基础视觉包mmcv,图像分 ...

  4. 对python的评价语_Python自然语言处理学习笔记之评价(evaluationd)

    对模型的评价是在test set上进行的,本文首先介绍测试集应该满足的特征,然后介绍四种评价方法. 一.测试集的选择 1.首先,测试集必须是严格独立于训练集的,否则评价结果一定很高,但是虚高,不适用于 ...

  5. 自然语言处理——基础篇01

    自然语言处理--基础篇01 一.什么是自然语言处理? 二.自然语言处理的难点与特点? 三.语言模型 四.NLP的常见任务类型 1. 中文分词 2. 子词切分(Subword) 3. 句法分析 4. 语 ...

  6. 正则表达式 数字和小数点_《自然语言处理综论》第三版笔记(二)之正则表达式,文本标准化和编辑距离...

    概要 早期有一种叫ELIZA的自然语言处理系统能够与用户进行有限的对话交流.它的原理是通过模式匹配来识别词组,譬如"YOU are X",然后将其转换为合适的回答,如"W ...

  7. 自然语言处理复习笔记

    自然语言处理期末复习笔记 复习摘要 大致梳理了下<自然语言处理>这门课程的知识纲要 作者: Hongtauo CSDN链接:(27条消息) Hongtauo的博客_CSDN博客-笔记,实验 ...

  8. python人工智能学习笔记_[Python] 人工智能与自然语言处理学习笔记(1)

    最近我参加了一个人工智能与自然语言处理的课程,这是第一周的学习笔记.这份笔记不涉及一般知识,全部都是与实践(我在这门课上的作业)有关的总结. 文章目录理论学习人工智能的五种模型:作业1. Rule B ...

  9. C#设计模式(学习笔记[01])

    C#设计模式(学习笔记[01])<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&quo ...

最新文章

  1. 趣味编程:函数式链表的快速排序(参考答案)
  2. 3、Python 基础类型 -- List 列表类型
  3. java流式传输对象_Java性能:面向教学与流式传输
  4. Android入门之文件系统操作(一)简单的文件浏览器
  5. Knn原理及Python实现、数据展示
  6. EverWeb for Mac(网页设计软件)v3.5.1中文版
  7. git 创建和合并分支
  8. 51单片机连接ESP8266串口WiFi模块
  9. 音乐节奏提取matlab,音乐旋律提取算法 附可执行demo
  10. 巧用Redis做游戏跨服排行榜
  11. eterm php,eterm配置出租 eterm3 eterm黑屏
  12. 史话上:量子物理学的前世今生
  13. 诗词格律[5] 词的基本知识
  14. Excel技巧 - Date函数日期转换
  15. 学习文档【超详细中文版】(小甲鱼视频)
  16. Flak 解析json数据不完整?
  17. C++排序求最值函数的调用
  18. Linux Log文件常用命令
  19. python3 获取/备份 iPhone icloud云端 中相关数据
  20. JavaCV入门指南:调用opencv原生API和JavaCV是如何封装了opencv的图像处理操作?

热门文章

  1. MySQL的JDBC 中的PreparedStatement是一把双刃剑,需要均衡利弊后再使用
  2. import lap报错ValueError
  3. 智慧养老、养老运营服务平台、陪护服务、养老院、托养、敬老院、健康管理、日常护理、残疾人管理、线下援助服务、助餐、助洁、助医、生活照料、养生保健、社区养老、居家养老、服务回访、健康数据、Axure原型
  4. 怎么把图片压缩到200K以内?如何在线压缩图片大小?
  5. 上海高考惊现0分作文 只因描写同性恋题材
  6. j3455跑mysql_基于J3455搭建NAS
  7. WI-FI LOGO认证学习记录
  8. 用友NCC产品API使用指南
  9. 实例:用C#.NET手把手教你做微信公众号开发(20)--使用微信支付线上收款:jsapi方式
  10. 思科交换机配置试题_cisco交换机配置简单教程.doc