利用python进行自然语言处理学习笔记——chap3加工原料文本

原料文本加工

1.电子书

    # 导入
    url = 'http://address/'
    raw = urllib.urlopen(url).read() # out put strings
    # 分词 (除去空格/换行符等;产生词汇和标点符号的list)
    tokens = nltk.word_tokenize(raw)
    # 可以创建nltk文本,进行相关nltk封装操作
    text = nltk.Text(tokens)
    # 网络文本可能含有不需要的收集信息比如许可证等。需要人工用find等定位,切片

2.html

 注:nltk.clean_html已经不能使用,用BeautifulSoup.get_text代替
    #导入
    url = 'http://address/'
    html = urlopen(url).read() #包含有meta元/图像标签/map标签等
    #从html中提取文本信息
    from bs4 import BeautifulSoup
    raw = BeautifulSoup(html)
    tokens = nltk.word_tokenize(raw.get_text())

3. NLP流程


字符串处理

pic2

1. 链表与字符串区别

字符串for循环不能选择粒度/list可以
一般操作是将一个字符串分词放入一个字符串list中
将结果写入一个文件或终端时,格式化为一个字符串

字符串不可修改

2.Unicode进行文字处理

这里写图片描述

import codes # 可以将文件进行unicode导入和写出
f = codes.open('/.txt', encoding = 'latin2') 
#unicode_escape是虚拟编码, 将所有非ASCII字符转化成unicode格式

import unicodedata # 可以检查unicode字符属性
#相关re module 和其他简单操作不再记录

3. 使用正则表达式检测词组搭配

不要忘记\ , {}, (), |
这里写图片描述

#  提取字符块
import re
re.findall(r'regexp', word) #找到所有满足regexp的字符
# 查找词干
def stem(word):
    regexp = r'^(.*?)(ing|ly|ed|ious|ies|ive|es|s|ment)?$'
    stem, tuffix = re.findall(regexp, word)[0]
    return stem

# 搜索已分词文本
mody = nltk.Text(corpus.words('txt'))
mody.findall(r''<a> (<.*>) <man>'')  #返回中间词,e.g. naive
mody.findall(r''<.*>,<.*>,<bro>")    #返回以bro结尾的三个词。

规范化文本

  1. 去掉词缀
  2. 提取词干
  3. 词形归并

    词干提取器

    一般而言,优先适用NLTK中的词干提取器而非正则表达式过滤。

    class IndexedText(object):
    def __init__(self, stemmer, text):
        self._text = text
        self._stemmer = stemmer
        self._index = nltk.Index((self._stem(word), i)
                                 for (i, word) in enumerate(text))
    
    def concordance(self, word, width=40):
        key = self._stem(word)
        wc = width/4
        for i in self._index[key]:
            lcontext = ' '.join(self._text[i-wc:i])
            rcontext = ' '.join(self._text[i: i+wc])
            ldisplay = '%*s' % (width,lcontext[-width:])
            rdisplay = '%-*s' % (width, rcontext[:width])
            print ldisplay, rdisplay
    
    def _stem(self, word):
        return self._stemmer.stem(word).lower()
词形归并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值