divideSentence
2024-05-11 22:33:30
#coding=utf-8 import obtainKeywords import sys, re import chardet reload(sys) sys.setdefaultencoding("utf-8") # sys.setdefaultencoding('gb18030') #判断 文本(字符串)的类型 def obtainTextType(ff):# import chardet enc = chardet.detect(ff) return enc['encoding'] #返回文件类型#################################################################################################文件编码类型判断 def obtainFileType(filepath):# import chardet tt = open(filepath, 'rb') ff = tt.readline() #这里试着换成read(5)也可以,但是换成readlines()后报错 tt.close() return obtainTextType(ff) #返回文件类型#################################################################################################读取文件, 返回去掉空格和空白的字符串 def ReadFile(url): #url文件的路径# print obtainFileType(url)if obtainFileType(url) == 'GB2312':#.decode("gbk").encode('utf-8') 以gbk编码格式读取字符串(因为他就是gbk编码的)并转换为utf-8格式输出content = open(url, "rb").read().decode("gbk").encode('utf-8')# print obtainTextType(content)elif obtainFileType(url) == 'ascii':content = open(url, "rb").read().encode('utf-8')# print obtainTextType(content)else:# print obtainFileType(url)content = open(url, "rb").read()# print obtainTextType(content) strRe = re.sub('\s', '', content) #用正则干掉所有的空白return strRe################################################################################################# 清除函数中多余的分句字符.---'?。!',如果连续出现,次序不限,只保留一次, # 并且,在列表头部, 不存在以上述字符开头的情况,有则删除. # 参数: 1 分词以后的一个词的链表 2:要删除的 特殊字符 def remove_special_characters_InText(word_list, special_characters):punt_list = special_characters # 作为句子结束的判断#在词表开头, 判断是否是以正文开头,还是以句子结束符开头.while True:if word_list[0] not in punt_list:breakelse:del word_list[0]singal = False # 标记, 如果前面存在了句尾结束符, 那么下一个必须不是, 如果还是,就不保存ReWords = [] # 保留词表 for word in word_list:if word not in punt_list:singal = TrueReWords.append(word)if word in punt_list:if singal == True:ReWords.append(word)singal = False# i = 1000# for w in ReWords:# i = i - 1# if i < 0:# break# print w,return ReWords################################################################################################# 处理一个句子中的连续符号的问题, 比如 ,.相连... def remove_special_characters_InSentence(divide_sentence_Map, special_characters):punt_list = special_characters # 作为句子结束的判断sentences_Map = {0:[]}# 还没有想好怎么处理, 有待商榷.......pass#################################################################################################根据分词之后的列表,进行分句 def divide_sentence_for_Map(strReContent):word_list = obtainKeywords.divide_text_words(strReContent) # 对文本进行分词# 这里需要说明一下, ?。! 只处理中文字符.就这三个做为结束符号.ReWordsList = remove_special_characters_InText(word_list, '?。!'.decode('utf8')) # 删除文章开头部分 和 文章中重复的, 连在一起的--- 句尾结束标记词# 分句, 将文章, 根据句子结束符, 分句.punt_list = '?。!'.decode('utf8') # 作为分句的判断divide_sentence_Map = {0:[]} # 保存分句的字典, key: 句子的顺序, value: 是一个列表, 保存了该句子被分词后的 词组.countNum = 0 # 计数, 作为字典的keytext_head_singal = False # 标记, 当被标记为True时, 字典key加1, 进入下一个句newline_singal = False # 开始新的一行for word in ReWordsList: # 遍历分词之后的磁链if word not in punt_list: # 如果这个分词, 是句尾标记词, 就进入下一句 divide_sentence_Map[countNum].append(word)else:divide_sentence_Map[countNum].append(word)countNum = countNum + 1 # 存储分句的字典 key 进行跟新divide_sentence_Map[countNum] = [] # 初始化#这里有待商榷.# # 处理分句中的符号问题, 比如 ,, 连在一起, 或者 ,. 连在一起.这种. 消除,保证句子的紧凑. 这样便于统计真是的句子长度和分词个数.# special_characters = "[。,?、|“”‘’;]{}(){}【】(){}():?!。,;、~——+%%`:".decode('utf8')# divide_sentence_Map = remove_special_characters_InSentence(divide_sentence_Map, special_characters)return divide_sentence_Map#################################################################################################程序进行中文分句, 返回分组之后的列表 def cut_sentence(words): #words是中文字符串words = (words).decode('utf8')start = 0i = 0sents = []token = ''punt_list = '?。!'.decode('utf8')for word in words:if word in punt_list and token not in punt_list: #检查标点符号下一个字符是否还是标点sents.append(words[start:i+1])start = i+1i += 1else:i += 1token = list(words[start:i + 2]).pop() # 取下一个字符if start < len(words):sents.append(words[start:])return sents#################################################################################################先读取文章中的数据,然后进行分句,返回分句之后的列表 def divideSentence(url):strRe = ReadFile(url)sentences = cut_sentence(strRe)return sentences# ------------------------------------------------------------------------------------------------------------------------#if __name__ == '__main__':# sentences = divideSentence('foo.txt')# print type(sentences) strRe = ReadFile('10.txt')divide_sentence_Map = divide_sentence_for_Map(strRe) #进行分词print len(divide_sentence_Map)for i in divide_sentence_Map[0]:print i, "-",# print len(divideSentence('foo.txt'))# for s in sentences:# print s.decode('utf-8')
转载于:https://www.cnblogs.com/hgonlywj/p/4842683.html
divideSentence相关推荐
最新文章
- Linux(CentOS)目录操作命令、文件操作命令、压缩解压缩命令
- Android中提示:Service Intent must be explicit:Intent
- 一个简易的渲染循环结构
- JavaScript入门(part4)--简单数据类型
- python3 sleep 并发_python异步编程之asyncio(百万并发)
- 操作系统:Linux虚拟内存知识介绍
- sicp 2.3-2.5 习题
- android 按钮点击动画效果_如何用纯css打造类materialUI的按钮点击动画并封装成react组件...
- 如何做好一位合格qc_如何成为一名合格优秀的QC,你合格吗?
- 一个基于Tp3.2(thinkphp3.2)的工会管理系统
- 第三方平台通过钉钉扫码登录实现方案
- 基于Python的淘宝用户行为数据分析
- 交流电过零点检测电路总结
- 技术帖:如何把mobi文件转化成pdf
- 最新--2018下半年Android面试历程(转载)
- workerman 7272端口被占用
- 洗澡的时候水温把握不住?可能是你没有学好数学
- 店铺创业选址的黄金法则
- 拉卡拉支付总裁舒世忠获评“2018支付行业年度影响力人物”
- go语言 第三方包安装方法_安装第三方软件到电视的方法,看直播应该下载什么软件?...