python里的基本操作
字符串操作
去空格及特殊符号
s = 'hello, world!'
print(s.strip()) # 去掉两边的空格
print(s.lstrip('hello, ')) # 去掉左侧字符
print(s.rstrip('!')) # 去掉右侧字符
hello, world
world!
hello, world
连接字符串
s1 = 'stracat'
s2 = 'append'
s1 = s1 + s2
print(s1)
strcatappend
查找字符
s1 = 'strcat'
s2 = 'r'
n = s1.index(s2)
print(n)
2
比较字符串
s1 = 'strchr'
s2 = 'strch'
print(cmp(s1,s2))
print(cmp(s2,s1))
print(cmp(s1,s1))
-1
1
0
大小写转换
s1 = 'HJIh'
s1= s1.upper()
#s1 = s1.lower()
print(s1)
HJIH
翻转字符串
s1 = 'abc'
s1 = s1[::-1]
print(s1)
cba
查找字符串
s1 = 'abcde'
s2 = 'cde'
print(s1.find(s2))
2
分割字符串
s1 = 'ab,cde,fgh,ijk'
s2 = ','
s1 = s1[s1.find(s2) + 1 :]
print(s1)
s = 'ab,cde,fgh,ijk'
print(s.split(',')) # 分成列表
cde,fgh,ijk
[‘ab’,‘cde’,‘fgh’,‘ijk’]
统计字符串中出现频次最多的字母
import re
from collections import Counter
def get_max_value_v1(text):
text = text.lower() # 全部小写
result = re.findall('[a-zA-z]',text) #运用正则表达式提取出去全部的字母(列表形式)
count = Counter(result) # counter的作用就是在数组中遍历所有的元素并将元素的个数记下,生成的为一个字典的格式
count_list = list(count.values())
max_value = max(count_list) # 已经找到最大的词频了
max_list = []
for k,v in count.items(): # 目的是找这个最大词频在字典中对应的位置
if v == max_value:
max_list.append(k)
max_list = sorted(max_list)
return max_list[0]
from collections import Counter
def get_max_value(text):
count = Counter([x for x in text.lower() if x.isapha()]) # isapha为判断是否为英文字母
m = max(count.values())
return sorted([x for (x,y) in count.items() if y == m])[0]
import string
def get_max_value(text):
text = test.lower()
return max(string.ascii_lowercase, key = text.count)
正则表达式
用来匹配出符合某种形式的词语,例如邮箱;
在线验证工具:regexr.com/
. 除去换行符之外的
\d 数字
\D 除了数字之外的
\s 空白字符
\S 除了空格之外
\w 单词字符
\W 非单词字符
\d{2}两个两个找数字 \d{2,4}有四个找四个,没四个找三个,没三个找两个
\?表示前一个字符/组合匹配一次或0次 与{0,1}的效果等价
* 表示前一个字符可以是无限次
+ 至少出现一次
[]l里放字符集,这里没有顺序之分
^和$分别表示开始和结束 ^h.*g$表示以h开头g结束,中间可以是任意多
| 表示或关系
()分组,会自动编号 (…).*\1代表最前面的三个字符在后面又出现过一次,中间可以有随机多个字符
re模块
步骤:
1.将正则表达式的字符串形式编译为pattern实例;
2.使用pattern实例处理文本并获得匹配结果
3使用match实例获得信息,进行其他的操作
import re
pattern = re.complie(rhello.*\!') # complie编译pattern
match = pattern.match('hello,hanxiaoyang! How are you ?') # 匹配字符串
# match = re.match(rhello.*\!','hello,hanxiaoyang! How are you ?') 一样
if match:
print match.gruop()
split分割
import re
p = re.complie(r'/d')
print(p.split('one1two2three3four4'))
[‘one’,‘two’,‘three’,‘four’]
findall搜索
import re
p = re.complie(r'/d')
print(p.findall('one1two2three3four4'))
[‘1’,‘2’,‘3’,‘4’]
sub替换
import re
p = re.complie(r'(\w+)(\w+)')
s = 'i say, hello hanxiaoyang'
print(p.sub(r'\2 \1',s)) # 分组互换位置
say i, hanxiaoyang hello
jieba中文处理
https://pypi.org/project/jieba/
基本分词函数
jieba.cut
三个输入参数:
1.需要分词的字符串
2.cut_all参数用来控制是否采用全模式
3.HMM参数用来控制是否使用HMM模型
jieba.cut_for_search (搜索引擎模式)
输入参数:
1.需要分词的字符串
2.是否使用HMM模型
import jieba
seg_list = jieba.cut("我在学习自然语言处理", cut_all = True)
print(seg_list)
# 我/在/学习/自然/语言/自然语言/处理
seg_list - jieba.cut("我在学习自然语言处理", cut_all = False) # 默认
print(seg_list)
# 我/在/学习/自然语言/处理
jieba.lcut和jieba.lcut_for_search直接返回list
添加用户自定义字典
jieba,load_userdict(file_name)加在用户字典
少量词汇可以自己用下面的方法手动添加:用add_word和del_word
关键词提取
基于TF-IDF算法的关键词抽取
用一个词出现的频次当做该词的重要程度判别
最理想的情况是,在某个文档内的词频很高,而喊这个词的文档却不多
jieba.analyse.extract_tags(sentence, topK=20, withWeight =False, alloePOS=())
sentence为代提取的文本
topK为返回几个TF-IDF权重最大的关键词。默认值20
withWeight为是否一并返回关键词权重值
allowPOS仅包括指定词性的词,默认为空
import jieba.ananlyse as analyse
lines = open('NBA.txt').read()
print("".join(analyse.extract_tags(lines, topK = 20, withWeigh =False, allowPOS=())))
textRank可以用来判别词性
jieba.ananlyse.textrank(sentence,topK=20,withWeigh=Flase,allowPOS=(‘ns’,‘n’,‘vn’,‘v’))直接使用
jieba.analyse.TextRank()新建自定义TextRank
算法论文《TextRank:Bringing Order into Texts》
词性标注
jieba.posseg.POSTokenizer(tokenizer=None)新建自定义分词器,tokenizer参数可指定内部使用的jieba.Tokenizer分词器,jieba.posseg.dt为默认词性标注分词器
标注句子分词后没歌词的词性,采用和ictclas兼容的标记法
import jieba.posseg as pseg
words = pseg.cut("我爱自然语言处理")
for word,flag in wprds:
print('%s %s '% (word ,flag))
我 r
爱 v
自然语言 l
处理 v
并行分词(linux,mac)
jieba.enable_parallel(4) 开启并行分词,参数为并行进程数
jieba.disable_parallel() 挂你并行分词模式
Tokenize:返回词语在原文的起止位置
result= jieba.tokenize()
for tk in result:
print("%s\t\t start : %d \t\t end :%d" % (tk[0],tk[1],tk[2])) # 返回定位信息
ChineseAnlyzer for Whoosh搜索引擎
from jieba.anallyse import ChinseseAnalzer