【NLP技术】:NLP简单介绍

本文深入介绍了自然语言处理(NLP)的基本概念和流程,包括文本预处理(去噪声、词汇归一化、目标标准化)、特征工程(句法分析、实体提取、统计特征和词嵌入)以及NLP的重要任务(文本分类、文本匹配/相似度等)。还探讨了NLP在数据科学中的应用,并推荐了相关的Python库。
摘要由CSDN通过智能技术生成

1. 前言

NLP是数据科学领域的一个重要的分支,它包含了以一种高效的方式去分析,理解和从文本里提取信息等重要过程。通过利用NLP及其组件,可以组织大量的文本数据,执行大量的自动化任务,并解决各种问题,比如自动摘要,机器翻译,命名实体识别,关系提取,情感分析,语音识别和主题分割等。

在这之前我需要先讲解下一些将会在文章出现的专业术语:

  1. 符号化—将文本转化成特定的计算机可以识别标记的过程。
  2. Tokens—文本中存在的单词和实体
  3. 文本目标–一个句子,一个短语,一个单词或者一篇文章

安装NLTK的过程:

安装Pip:

sudo easy_install pip

安装NLTK:

 sudo pip install -U nltk

下载NLTK数据:

import nltk
nltk.download()

2. 文本预处理

由于文本是所有数据中最非结构化的形式,所以存在各种类型的噪音,并且在不进行任何预处理的情况下,不容易分析。清洁和标准化文本,使其无噪声和准备分析的过程称为文本预处理。

这个过程主要由以下三步组成:

  1. 去噪声
  2. 词汇归一化
  3. 目标标准化

2.1 去噪声

只要是和输出没有关系的文本都可以看做噪声。

例如:语言的停用词(is,am, the, of等),URLs, 链接,社交媒体实体,标点符合和行业特定词。这一步主要是移除文本中的噪声因子。

噪声去除的一般方法是编写嘈杂实体的字典,并通过迭代文本对象消除噪声字典中存在的标记。

下面代码python实现的方式:

noise_list=['is','a','this','...']
def _remove_noise(input_text):
    words = input_text.split()
    noise_free_words=[word for word in words if word not in noise_list]
    noise_free_text = " ".join(noise_free_words)
    return noise_free_text

_remove_noise("this is a sample text")
>>> "sample text"

另一种方式是在使用特殊噪声模式时使用正则表达式。我们在前面的一篇文章中详细解释了正则表达式。下面python代码从输入文本中移除正则表达式模式:

 def _remove_regex(input_text, regrex_pattern):
        urls=re.finditer(regex_pattern, input_text)
        for i in urls:
            input_text = re.sub(i.group().strip,'', input_text)
         return input_text
    
    regrex_pattern = "#[\w]*"
    
    
_remove_regex("remove this #hashtag from analytic vidhya", regrex_pattern)
 >>>>"remove this from analytic vidhya"

2.2 词汇归一化

文本噪声的另一种类型是关于单个单词所表现的多个表示。

例如:“play”,“player”,“played",“plays” 和 ”playing"是“play"的多种表示形式。虽然他们的含义不一样,但是上下文中是相似的。这一步就是要把这些各种形式的单词归一化。归一化是具有文本特征工程的关键步骤,因为它将高纬特征(N个不同特征)转化成低维空间(1特征),这是任何ML模型的理想要求。

最常用的归一化方法是:

  1. 词干(Steamming):词干是消除后缀的一个基本的基于规则的过程。(“ing”, “ly”, “es”等)
  2. 词元化(Lemmatization): 词元化是一个有组织性的,逐步地获得词根的过程,他利用词汇(单词的词典重要性)和词法分析(词法结构和词法关系)。

下面就是利用NLTK包的词干提取和词元化的python代码:

from nltk.stem.wordnet import WordNetLemmatizer
lem = WordNetLemmatizer()
  
from nltk.stem.porter import PorterStemmer
stem = PorterStemmer()

word = "multiplying"
lem.lemmatize(word, 'v')
>>> "multiply"

stem.stem(word)
>>>"multipli"

2.3 目标标准化

文本数据通常包含不存在于任何标准词汇词典中的词或者短语。这些片段不被搜索引擎和模型所识别 。

一些例子是,首字母缩略词,带有附加词的标签和口语哩语。在 正则 表达式和手工编写的数据字典的帮助下,这种类型的噪声可以被固定。下面的代码使用字典查找方法来替代文中的 社交媒体哩语。

look_dict = {
   'rt':'Retweet','dm':'direct message','awsm':'awesome','luv':'love','...'}

def _look_words(input_text):
    words = input_text.split()
    new_words = []
    for word in words:
        if word.lower() in lookup_dict:
            word = lookup_dict[word.lower()]
        new_words.append(word)
    new_text = " ".join(new_words)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值