#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相关推荐

最新文章

  1. Linux(CentOS)目录操作命令、文件操作命令、压缩解压缩命令
  2. Android中提示:Service Intent must be explicit:Intent
  3. 一个简易的渲染循环结构
  4. JavaScript入门(part4)--简单数据类型
  5. python3 sleep 并发_python异步编程之asyncio(百万并发)
  6. 操作系统:Linux虚拟内存知识介绍
  7. sicp 2.3-2.5 习题
  8. android 按钮点击动画效果_如何用纯css打造类materialUI的按钮点击动画并封装成react组件...
  9. 如何做好一位合格qc_如何成为一名合格优秀的QC,你合格吗?
  10. 一个基于Tp3.2(thinkphp3.2)的工会管理系统
  11. 第三方平台通过钉钉扫码登录实现方案
  12. 基于Python的淘宝用户行为数据分析
  13. 交流电过零点检测电路总结
  14. 技术帖:如何把mobi文件转化成pdf
  15. 最新--2018下半年Android面试历程(转载)
  16. workerman 7272端口被占用
  17. 洗澡的时候水温把握不住?可能是你没有学好数学
  18. 店铺创业选址的黄金法则
  19. 拉卡拉支付总裁舒世忠获评“2018支付行业年度影响力人物”
  20. go语言 第三方包安装方法_安装第三方软件到电视的方法,看直播应该下载什么软件?...

热门文章

  1. Spring 下,关于动态数据源的事务问题的探讨
  2. 你能说出 Kafka 这些原理吗
  3. 如何模拟超过 5 万的并发用户
  4. CMS 被废弃了,该怎么办呢?
  5. 为什么很多SpringBoot开发者放弃了Tomcat,选择了Undertow
  6. 千万不要一辈子靠技术生存
  7. OpenResty 最佳实践
  8. 如果要将对象用作Map中的key,需要注意什么
  9. 高效“炼丹”必备技能:一文实现深度学习数学原理入门,还有吴恩达老师亲授课程...
  10. 200页!分享珍藏很久的Python学习知识手册(附链接)