Python爬取特朗普就职演讲稿,使用ngram模型进行数据清洗

利用Python爬取特朗普英文就职演讲稿,并使用ngram模型进行数据清洗处理


  互联网络上数据十分丰富,我们可以利用网络爬虫技术轻松获取到这些数据,但是获取的数据往往不像我们学习爬虫时那样样式规范的数据。在网络数据采集中,不可避免地会遇到样式不规范的数据,而且无法对数据集进行挑剔,所以掌握数据清洗的方法十分必要。
  本文主要内容是利用Python从网页上爬取格式混乱的英文讲稿,然后将数据进行清洗,最后按照ngram模型来分词组。最终实现将输入的杂乱文章输出为格式规范的词组。

ngram模型:ngram是语言学的一个模型,表示文字或语言中的n个连续的单词组成的序列。

爬取链接http://www.guancha.cn/america/2017_01_21_390488_s.shtml

下面是Python程序代码:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
import string
from collections import OrderedDict

def cleanInput(input):
    input = re.sub('(\n|\t|\r)+', " ", input)
    input = re.sub(' +', " ", input)
    input = bytes(input, "UTF-8")
    input = input.decode("ascii", "ignore")
    cleanInput = []
    input = input.split(' ')
    for item in input:
        item = item.strip(string.punctuation)
        cleanInput.append(item)
    return cleanInput


def ngrams(input, n):
    input = cleanInput(input)
    output = {}
    for i in range(len(input)-n+1):
        ngramTemp = " ".join(input[i:i+n])
        if ngramTemp not in output:
            output[ngramTemp] = 0
        output[ngramTemp] += 1;
    return output

html = urlopen("http://www.guancha.cn/america/2017_01_21_390488_s.shtml")
bsObj = BeautifulSoup(html)
ps = bsObj.find("div", {"id": "cmtdiv3523349"}).find_next_siblings("p");
content = ""
for p in ps:
    content = content + p.get_text()
ngrams = ngrams(content, 2)
ngrams = OrderedDict(sorted(ngrams.items(), key=lambda t: t[1], reverse=True))
print(ngrams)
print("2-grams count is:" + str(len(ngrams)))

  这个程序中获取文本内容部分:首先使用urlopen函数来获取html文档内容,之后使用BeautifulSoup库来对文档进行解析。当要从文档中获取英文内容是,查看页面源代码发现在中文演讲稿和英文演讲稿中间有一个兄弟节点div并且具有id,所以可以获取这个div,然后通过find_next_siblings(“p”)函数获取这个div的所有后继兄弟节点。之后通过get_text()函数迭代获取英文文本内容。数据清洗部分:这个部分根据具体文档的需要可以制定不同的清洗规则,比如这篇文档主要存在的问题:

  1. 存在转义符号(如\n,\t,\r)
  2. 有些字符显示不出来
  3. 单词的标点符号

  对于数据的清洗具体细节实现在cleanInput(input)函数中,使用了string.punctuation将词组两边的标点符号去除。string.punctuation包含了常用的标点符号’!”#$%&\’()*+,-./:;<=>?@[\]^_`{|}~’
  数据清洗之后会分割出出现的词组及其出现的次数。在Python中的dict默认是不会进行排序的。所以我们使用collections集合中的OrderedDict类来对字典进行排序,通过设定sorted函数的排序规则达到目的。
  最终的输出如下:
Python爬取特朗普就职演讲稿,使用ngram模型进行数据清洗_第1张图片

  可以看到结果中出现次数比较多的词是we will, our country。我们可能会认定we will是这篇文章的主题词,但是根据常识判断显然不是,所以我们要想办法去除那种文章中常用的单词组合。
  幸运的是,前人已经研究过常用词和可能出现在文章中的主题词,他们的研究结果可以帮助我们做过滤工作(https://corpus.byu.edu/coca/)。

你可能感兴趣的:(数据清洗,python,爬虫)