首先是:
-------------------------------------------------------------------------------------------------------------------------------------------------------------
一个很重要的问题,这么多年以来一直忽略了,就是英文的逗号,句号,分号后下一个内容前,都要有一个空格的,这
样才是规范的。(这是在想那个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处理)后还是会保留的,这些空格就是正常的字符,当然两个单词之间的空格不会保留,因为就是根据这个空格去得到切分结果的(即根据这个区别一个个的单词)。
大概就是这些吧,现在要去写自然辩证法的作业了。。