dict_文本解析(去除标点符号)

But, soft! what light through yonder window breaks?
It is the east, and Juliet is the sun.
Arise, fair sun, and kill the envious moon,
Who is already sick and pale with grief,

Python的split函数可以识别空格,把词汇看作是由空格分隔开来的词单元,所以,“soft”和“soft!”会被视为不同的词汇,分别为它们创建一个字典项。

由于文本中还存在大写,“who”和“Who”也是不同的词,分别进行统计。

通过字符串的lower、punctuation与translate方法可以解决上述问题。其中translate是最精细的方法。以下是translate的说明文档:

string.translate(s, table[, deletechars])

首先,从s中删除deletechars参数(如果存在的话)指定的所有字符,然后使用table参数来翻译字符。table是一个256个字符长的字符串,用来翻译每个字符值,并按照序数进行索引。如果table是None值,只会执行字符删除步骤。

这里不指定table参数,用deletechars参数来删除所有标点符号。Python甚至可以告诉我们,标点符号包括哪些字符:

>>> import string
>>> string.punctuation
‘!"#$%&\‘()*+,-./:;<=>[email protected][\\]^_`{|}~‘

我们对程序做出如下修改:

import string                                          # New Code

fname = raw_input(‘Enter the file name: ‘)
try:
    fhand = open(fname)
except:
    print ‘File cannot be opened:‘, fname
    exit()

counts = dict()
for line in fhand:
    line = line.translate(None, string.punctuation)    # New Code
    line = line.lower()                                # New Code
    words = line.split()
    for word in words:
        if word not in counts:
            counts[word] = 1
        else:
            counts[word] += 1

print counts

我们使用translate方法删除了所有的标点符号,并将每一行中的字母转换为小写。程序主体并未发生改变。请注意,Python2.5及早期版本中,translate方法不接受None值作为第一个参数,因此使用下面的代码来调用该方法:

print a.translate(string.maketrans(‘ ‘,‘ ‘), string.punctuation

懂得一些“Python的艺术”和“像Python一样思考”,不难发现Python为许多常见数据分析问题内置了解决方案。随着学习的深入,通过大量的示例代码和技术文档的阅读,你会知道去哪里寻找别人是否用Python已经解决了此类问题,从而减轻一些你的工作。

以程序运行的部分输出结果如下:

Enter the file name: romeo-full.txt
{‘swearst‘: 1, ‘all‘: 6, ‘afeard‘: 1, ‘leave‘: 2, ‘these‘: 2,
‘kinsmen‘: 2, ‘what‘: 11, ‘thinkst‘: 1, ‘love‘: 24, ‘cloak‘: 1,
a‘: 24, ‘orchard‘: 2, ‘light‘: 5, ‘lovers‘: 2, ‘romeo‘: 40,
‘maiden‘: 1, ‘whiteupturned‘: 1, ‘juliet‘: 32, ‘gentleman‘: 1,
‘it‘: 22, ‘leans‘: 1, ‘canst‘: 1, ‘having‘: 1, ...}

查看这些输出仍然很费事,让Python来帮助我们找到具体要找到的信息。要做到这一点,我们需要学习Python的元组。在学习元组时会继续使用这个例子。

原文地址:https://www.cnblogs.com/fivecats/p/8653756.html

时间: 2024-08-30 18:16:29

dict_文本解析(去除标点符号)的相关文章

文本预处理去除标点符号

NLP 分词或word2vec之前,一般都需要先进行标点符号的预处理,直接上解决的代码,精简. #!/usr/bin/env python # coding=utf-8 from string import punctuation import re import sys reload(sys) sys.setdefaultencoding('utf-8') import codecs # 英文标点符号+中文标点符号 punc = punctuation + u'.,;<>?!“”‘’@#¥%

Atitit&#160;发帖机实现(2)---usrQBN2243 文本解析到对象协议规范

Atitit 发帖机实现(2)---usrQBN2243 文本解析到对象协议规范 文本内容 ###注释 标题:标题标题标题标题标题1 人数:5 月薪:2000-3000 内容: 内容内容内 容内容内容内容1 var cmd='   '; cmd+='  $("input[name=\'title\']").val("@[email protected]"); $("input[name=\'need_num\']").val("@[em

JavaScript大杂烩8 - 理解文本解析的"黄金搭档"

文本解析"黄金搭档" - String与RegExp对象 文本解析是任何语言中最常用的功能,JavaScript中也是一样,而正则表达式作为最常用的方式,JavaScript也同样是支持的,下面就来看看字符串对象与正则表达式对象的配合. 字符串的恒定性 在正式开始讨论字符串对象的成员之前,我们需要了解一点,那就是:与C#一样,JavaScript 的字符串是不可变的(immutable),String对象定义的方法都不会改变字符串的内容.像toUpperCase这样的方法,返回的是全新

Python 文本解析器

Python 文本解析器 一.课程介绍 本课程讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 二.相关技术 Python:一种面向对象.解释型计算机程序设计语言,用它可以做 Web 开发.图形处理.文本处理和数学处理等等. HTML:超文本标记语言,主要用来实现网页. 三.项目截图 纯文本文件: Welcome to ShiYanLou ShiYanLou is the first experiment with IT as the core of online ed

小程序富文本解析

微信小程序富文本解析wxParse:https://github.com/icindy/wxParse 百度小程序富文本解析bdParse:https://github.com/fengye002012/bdParse 抖音头条小程序富文本解析ttParse:https://github.com/nqp1994/ttParse 原文地址:https://www.cnblogs.com/suni1024/p/11634609.html

DS标签控件文本解析格式

DS标签控件使用DSL文本渲染引擎,支持DSL引擎代码.目前支持代码如下: <b>粗体</b> 以粗体显示 <i>斜体</i> 以斜体显示 <u>下划线</u> 以下划线显示 <link=标识,target=链接目标>链接</link> 插入一个链接,如果指定enabled=false,则显示为一个灰色不可点击的链接 <link=标识>链接</link> <link=标识,enab

PERL/LEX/YACC技术实现文本解析--XML解析

继周六的p_enum.pl后,再来一篇说说我用perl做的lex,yacc工具.之前说了,我学习lex和yacc的最初动机是为了做个C语言解释器的SHELL:但后来工作中的实际需要也是制作perl版lex和yacc的一个动机.Perl库里有lex和yacc,我没研究过,想来应该比我做的强大,不过对新手来说,未必能容易入手. 我的第一个应用场景是做一个xml配置文件的排序.XML是标签标记语言,同一级下,TAG顺序本身是无所谓的:但对于测试工作来说,经常要通过文本比较工作来确定两个配置文件差别.如

java 正则表达式去除标点符号

public class Test { public static void main(String[] args) { String str = "!!!??!!!!%*)%¥!KTV去符号标号!!当然,,.!!..**半角"; System.out.println(str); String str1 = str.replaceAll("[\\pP\\p{Punct}]", ""); System.out.println("str1:

文本中剔除标点符号的纯python解法

punct = set(u''':!),.:;?]}¢'"..〉>」』]]]〞︰︱︳﹐?﹒ ﹔﹕﹖﹗﹚﹜﹞!),.::?|}︴︶︸︺︼︾﹀﹂﹄﹏?-¢ 々|?·ˇˉ―--′'"([{£¥'"‵〈<「『[[[([{£¥〝︵︷︹︻ ︽︿﹁﹃﹙﹛﹝({"'--_-''') # 对str/unicode filterpunt = lambda s: ''.join(filter(lambda x: x not in punct, s)) # 对list filt