找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4622|回复: 7

[已回复] 新手求助,PYTHON处理.txt 文件问题

1

主题

5

帖子

5

积分

贫民

积分
5
PYTHON范范 发表于 2016-10-10 21:35:19 | 显示全部楼层 |阅读模式
我想有一个程序把一篇中文文章或书籍的字列出来。每个字的使用次数。每次使用所在的句子。然后按照拼音顺序排序输出到一个文件里。

目前统计字频部分已经写好了。如下:
# -*- encoding: gbk -*-

def is_chinese(uchar):
        """判断一个unicode是否是汉字"""
        if uchar >= u'\u4E00' and uchar <= u'\u9FA5':
            return True
        else:
            return False

def count_chinese_word(filepath, encoding):
    _dict = {}
    try:
        with open (filepath, 'r') as txt_file:
            for line in txt_file:
                ustr = line.decode(encoding)
                for uchar in ustr:
                    if is_chinese(uchar):
                        if _dict.has_key(uchar):
                            _dict[uchar] = _dict[uchar] + 1
                        else:
                            _dict[uchar] = 1
    except IOError as ioerr:
        print "文件",filepath,"不存在"

    return _dict

if __name__ == '__main__':
    _dict = count_chinese_word('内容.txt', 'gbk')

    import json
    print json.dumps(_dict, encoding = "utf-8", indent = 4, ensure_ascii = False)


但是我不太会如何输出每个字每次使用所在的句子,求教吧里各位大神。万分感谢

回复

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-10-10 22:35:20 来自手机 | 显示全部楼层
简单处理的话,可以把ustr看作字所在的句子。夏杂的话,需要实现断句,挺麻烦,用正则表达式或pyparsing吧
回复 支持 反对

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
PYTHON范范  楼主| 发表于 2016-10-10 22:54:00 | 显示全部楼层
whydo1 发表于 2016-10-10 22:35
简单处理的话,可以把ustr看作字所在的句子。夏杂的话,需要实现断句,挺麻烦,用正则表达式或pyparsing吧 ...

小弟初学。您知道怎么使用正则或者pyparsing吗
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
一点都简单 发表于 2016-10-11 14:02:28 | 显示全部楼层
中文分词,当然要用大名鼎鼎的jieba包!  
回复 支持 反对

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
PYTHON范范  楼主| 发表于 2016-10-11 15:59:36 | 显示全部楼层
一点都简单 发表于 2016-10-11 14:02
中文分词,当然要用大名鼎鼎的jieba包!

大神能给个例子吗
回复 支持 反对

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-10-11 19:14:35 | 显示全部楼层
这里有一段代码你可以试试.作者是参考《Natural Language Processing with Python》的英文分句方法来做的。

  1. #! /usr/bin/env python2.7
  2. #coding=utf-8



  3. def cut_sentence_new(words):
  4.     # words = (words).decode('utf8')
  5.     start = 0
  6.     i = 0
  7.     sents = []

  8.     punt_list = ',.!?:;~,。!?:;~'.decode('utf8')
  9.     for word in words:
  10.         if word in punt_list and token not in punt_list: #检查标点符号下一个字符是否还是标点
  11.             sents.append(words[start:i+1])
  12.             start = i+1
  13.             i += 1
  14.         else:
  15.             i += 1
  16.             token = list(words[start:i+2]).pop() # 取下一个字符
  17.     if start < len(words):
  18.         sents.append(words[start:])
  19.     return sents
复制代码
回复 支持 反对

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
PYTHON范范  楼主| 发表于 2016-10-15 23:19:28 | 显示全部楼层
回复

使用道具 举报

1

主题

5

帖子

5

积分

贫民

积分
5
PYTHON范范  楼主| 发表于 2016-10-23 22:46:54 | 显示全部楼层
吧里大神帮我看看吧。谢谢啦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表