自然语言处理

一、字符串操作

去空格及特殊符号

s = ' hello, world!'
#默认把左右空格去掉
print s.strip()
print s.lstrip(' hello, ')
print s.rstrip('!')

查找字符

# < 0 为未找到
sStr1 = 'strchr'
sStr2 = 'tr'
#找到返回目标子串开始下标
nPos = sStr1.index(sStr2)
print nPos

大小写:upper()和lower()方法

删除字符串:分片的方式

比价字符串:cmp()

分割

s = 'ab,cde,fgh,ijk'
print(s.split(','))

二、正则表达式

https://regexr.com/验证网站,FQ进

https://alf.nu/RegexGolf练习网站

字符:

.:匹配除换行符外所有字符

\d:所有数字

\D:所有除数字外所有字符

\s:空格、table键、换行

\S:除掉所有空格、table键、换行外所有

\w:数字,字符和下划线(大小写都有)

对应大写都是除掉小写对应的规则的字符,即反规则

数量词:

{n}:找到两个对应前边规则的字符

{m,n}找到m-n个前边规则的字符:\d{2-4}找到长度为2到4的连续数字串

?:前边规则出现1次或者0次的:and?:an或者and都可以

*:匹配到前边规则结束,即0到无限个,abc*:abc或者abccccccc或者ab

+:1到无限个

用括号可以表示规则组合:(ab)*:ababababab

[]:中括号里表示想要的字符[abc]:想要a和b和c   [a-g]:想要a-g的

边界词:

^:后边跟规则,代表以xx开头的

$:前边加规则,代表以xx结尾:^ab$:以a开头,b结尾的

|:前后都加规则,代表或者

python中正则表达式模块:re

使用re的一般步骤是

  • 1.将正则表达式的字符串形式编译为Pattern实例
  • 2.使用Pattern实例处理文本并获得匹配结果(一个Match实例)
  • 3.使用Match实例获得信息,进行其他的操作。
# encoding: UTF-8
import re
 
# 将正则表达式编译成Pattern对象,格式是r'模式串'
pattern = re.compile(r'hello.*\!')
 
# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
match = pattern.match('hello, hanxiaoyang! How are you?')
 
if match:
    # 使用Match获得分组信息
    print match.group()

三、jieba中文处理

3.1基本分词函数与用法

jieba.cut函数:

  • 需要分词的字符串
  • cut_all 参数用来控制是否采用全模式
  • HMM 参数用来控制是否使用 HMM 模型

jieba.cur_for_search方法接受两个参数

  • 需要分词的字符串
  • 是否使用 HMM 模型。
# encoding=utf-8
import jieba

seg_list = jieba.cut("我在学习自然语言处理", cut_all=True)
print seg_list
print("Full Mode: " + "/ ".join(seg_list))  # 全模式

seg_list = jieba.cut("我在学习自然语言处理", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精确模式

seg_list = jieba.cut("他毕业于上海交通大学,在百度深度学习研究院进行研究")  # 默认是精确模式
print(", ".join(seg_list))
#cut_for_search的划分粒度很细
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在哈佛大学深造")  # 搜索引擎模式
print(", ".join(seg_list))

添加用户自定义词典

针对自己的场景,可能会有一些领域内的专有词汇

  • 1.可以用jieba.load_userdict(file_name)加载用户字典
  • 2.少量的词汇可以自己用下面方法手动添加:
    • 用 add_word(word, freq=None, tag=None) 和 del_word(word) 在程序中动态修改词典
    • 用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

关键词提取:

1.基于TF-IDF算法的关键词提取

jieba.analyse.extract_tags(sentence,topK=n,withWeight = False,allowPOS=())

  • sentence 为待提取的文本
  • topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight 为是否一并返回关键词权重值,默认值为 False
  • allowPOS 仅包括指定词性的词,默认值为空,即不筛选
import jieba.analyse as analyse
lines = open('NBA.txt').read()
print "  ".join(analyse.extract_tags(lines, topK=20, withWeight=False, allowPOS=()))

猜你喜欢

转载自www.cnblogs.com/stAr-1/p/8954202.html