Sequence类型
Sequence是Python的一种内置类型(built-in type),内置类型就是构建在Python Interpreter里面的类型,三种基本的Sequence Type是list(表),tuple(定值表,或翻译为元组),range(范围)。可以看作是Python Interpreter定义了这样三个class。
字符串也是一种序列。RuntimeError: NLPIR function ‘NLPIR_Init’ failed.
说明 pynlpir的library的授权过期了解决方法
可到github上下载新的授权:https://github.com/NLPIR-team/NLPIR/tree/master/License,并将新的授权放到data文件夹下,并重启项目,再次测试分词程序,分词成功。
我用到的是分词的功能,提供分词的license for a month 一个月的有效期,如果失效再去网上下载新的授权覆盖源文件即可 NLPIR.user
注意一定要用正确的方式下载!pynlpir, nlpir 的python端接口, 通过python 使用nlpir / ictclas 2015
如果有pip 的话,直接pip install pynlpir
#最新版本在4.0
项目地址在https://github.com/tsroten/pynlpir;有时候
list index out of range
的意思不是列表存不下了,是对应列表的编号不存在而已- 定义了空列表后不能对其索引
,如:
content = []
for i in range(1,3):
content[i] = table.cell(i, 5)
#会报错
- 在python2.7下,将字符串写入到文件时会出现”UnicodeEncodeError: ‘ascii’ codec can’t
encode character u’\xa0’ in
position”的错误,原因是由于python基于ASCII处理字符的,当出现不属于ASCII的字符时,会出现错误信息。 解决:
指定文件字符集为utf-8 在文件头部加入以下代码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
- Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)。
语法
strip()方法语法:
str.strip([chars]); - dict.items()方法返回字典的(键,值)元组对的列表
- python中的os.path.join()是在拼接路径的时候用的
os.path.join(“home”, "me", "mywork")
在Linux系统上会返回
“home/me/mywork"
在Windows系统上会返回
"home\me\mywork"
好处是可以根据系统自动选择正确的路径分隔符”/”或”\” - docs_matrix.shape[1] 读取二维矩阵docs_matrix的第二维度
Docs_matrix=
[[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 1. 0. ..., 13. 0. 0.]
[ 0. 0. 4. ..., 0. 0. 2.]
[ 0. 0. 0. ..., 0. 0. 0.]
[ 1. 0. 0. ..., 0. 0. 0.]]
则
docs_matrix[:,2] =[ 0. 0. 0. 4. 0. 0.]
相当于第三列 - np.nonzero(docs_matrix[:, 2])
(array([3], dtype=int64),)
nonzeros(a)返回数组a中值不为零的元素的下标,本例中为第四行第三列的元素4的列的下标,它的返回值是一个长度为a.ndim(数组a的轴数)的元组,元组的每个元素都是一个整数数组,其值为非零元素的下标在对应轴上的值。
所以np.nonzero(docs_matrix[:, 2])[0]即为第3列不为零的元素的下标
len(np.nonzero(docs_matrix[:, i])[0])即为第i列中不为零的元素的个数 `column_sum = [float(len(np.nonzero(docs_matrix[:, i])[0])) for i in
range(docs_matrix.shape[1])]x = [1 for i in range(n)]`
是n个1组成的列表 [1,1,…] 和 x = [1] * n 一个效果所以
column_sum = [float(len(np.nonzero(docs_matrix[:, i])[0])) for i in
为每列不为零的元素的个数组成的列表
range(docs_matrix.shape[1])]
Python中的join()函数的用法
函数:string.join()
Python中有join()和os.path.join()两个函数,具体作用如下:
join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
os.path.join(): 将多个路径组合后返回
一、函数说明
1、join()函数
语法: ‘sep’.join(seq)
参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串
返回值:返回一个以分隔符sep连接各个元素后生成的字符串
2、os.path.join()函数
语法: os.path.join(path1[,path2[,……]])
返回值:将多个路径组合后返回
注:第一个绝对路径之前的参数将被忽略
#对序列进行操作(分别使用' '与':'作为分隔符)
>>> seq1 = ['hello','good','boy','doiido']
>>> print ' '.join(seq1)
hello good boy doiido
>>> print ':'.join(seq1)
hello:good:boy:doiido
#对字符串进行操作
>>> seq2 = "hello good boy doiido"
>>> print ':'.join(seq2)
h:e:l:l:o: :g:o:o:d: :b:o:y: :d:o:i:i:d:o
#对元组进行操作
>>> seq3 = ('hello','good','boy','doiido')
>>> print ':'.join(seq3)
hello:good:boy:doiido
#对字典进行操作
>>> seq4 = {'hello':1,'good':2,'boy':3,'doiido':4}
>>> print ':'.join(seq4)
boy:good:doiido:hello
#合并目录
>>> import os
>>> os.path.join('/hello/','good/boy/','doiido')
'/hello/good/boy/doiido'
python模块之codecs: 自然语言编码转换
#-*- encoding: gb2312 -*-
import codecs, sys
# 用codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode
bfile = codecs.open("dddd.txt", 'r', "big5")
#bfile = open("dddd.txt", 'r')
ss = bfile.read()
bfile.close()
# 输出,这个时候看到的就是转换后的结果。如果使用语言内建的open函数来打开文件,这里看到的必定是乱码
print ss, type(ss)
两种读取txt文件有多少行的办法:
f = open('stopwords.txt','r')
lines = f.readlines()
f.close()
n=0
for line in lines:
n = n+1
print(n)
或者
count = len(open(r"stopwords.txt",'rU').readlines())
print count
(适用于文件比较小时)
或者
count1 = -1
for count1, line in enumerate(open(r"stopwords.txt", 'rU')):
pass
count1 += 1
print count1
(适用于文件比较大)
或者
count1 = 0
thefile = open(r"stopwords.txt", 'rb')
while True:
buffer = thefile.read(1024 * 8192)
if not buffer:
break
count1 += buffer.count('\n')
thefile.close()
print count1
(更好的办法)