就是2018年4月21日纠结了一段时间的东西,其实没啥

首先是:

-------------------------------------------------------------------------------------------------------------------------------------------------------------

一个很重要的问题,这么多年以来一直忽略了,就是英文的逗号,句号,分号后下一个内容前,都要有一个空格的,这
样才是规范的。(这是在想那个nltk包是句子级别的切分,会识别出句号.然后进行切分的时候根据网上的代码做试验
偶然发现的。当时就是因为第一个句子的句号后面没有打一个空格就直接开始第二个句子了,结果nltk的sent_token函数
也无法正确地切分句子,从而发现了这个问题)

--------------------------------------------------------------------------------------------------------------------------------------------------------------

然后:还是与这个相关的,具体如下:

1 def get_tokens(text):
2     lower = text.lower()
3     remove_punctuation_map = dict((ord(char), None) for char in string.punctuation)#这里用ord函数的原因是用了之后就可以不用str.maketrans函数了,否则如果这里是dic((char,None) for XXX))的话
4     print(remove_punctuation_map)                                                  #虽然不会报错,但是后面的translate函数不会起作用,也就是说你构造的这个字典没有经过str.maketrans函数处理,translate函数就不会按照它的键和值关系去修改字符串
5     no_punctuation = lower.translate(remove_punctuation_map)
6     tokens = nltk.word_tokenize(no_punctuation)

对,这个问题就是纠结了为什么要用ord函数的问题,最后经过试验,自己定义一个字典,比如{97:'a',105:'i'}这样的,也是一样的效果,即在后面不需要用str.maetrans函数(这个函数是python3的,代替了python2的string.maketrans函数),虽然不知道为什么但是确实就是这样,而且在pycharm里面如果用{97:'a',105:'i'}这样的,这97和105两个数字还会变颜色,说明确实是有特殊用法的。

还要就是string.punctuation里面不包括空格的,空格是字符串,如果你的文本里面有特别多的空格,分词(nlkt.word_tokenize处理)后还是会保留的,这些空格就是正常的字符,当然两个单词之间的空格不会保留,因为就是根据这个空格去得到切分结果的(即根据这个区别一个个的单词)。

大概就是这些吧,现在要去写自然辩证法的作业了。。

转载于:https://www.cnblogs.com/liuqiang8650/p/8903139.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值