文本特征提取

一、为什么要做文本特征提取?

想象你要教AI识别两种文本:

  • 类型A:"这部电影太棒了,强烈推荐!"

  • 类型B:"糟糕的观影体验,浪费钱。"

计算机只认识数字,不认识汉字/英文。我们需要把文字转换成特征向量(一组数字),就像把中文翻译成计算机的母语。


二、文本特征提取三大方法

方法1:词袋模型(Bag of Words)

核心思想:数单词出现的次数,忽略顺序
类比:就像把一篇文章丢进碎纸机,统计每个单词碎片的数量

from sklearn.feature_extraction.text import CountVectorizer

corpus = [
    "I love python programming",  # 文档1
    "Python is better than Java"  # 文档2
]

# 创建词袋模型
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)

# 查看结果
print("词表:", vectorizer.get_feature_names_out())
print("特征矩阵:\n", X.toarray())
 

输出

词表: ['better' 'java' 'love' 'programming' 'python' 'than']
特征矩阵:
 [[0 0 1 1 1 0]  # love(1), programming(1), python(1)
 [1 1 0 0 1 1]] # better(1), java(1), python(1), than(1)
 

特点

  • 简单直接

  • 丢失了单词顺序("狗咬人"和"人咬狗"结果一样)

  • 适合小规模文本分类

方法2:TF-IDF(词频-逆文档频率)

核心思想:给重要的词打高分,常见词打低分
类比:老师批改作文时,会给"人工智能"这种专业词加分,对"的/是"这种常见词忽略

from sklearn.feature_extraction.text import TfidfVectorizer

corpus = [
    "The cat sat on the mat",
    "The dog ate my homework"
]

vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)

print("词表:", vectorizer.get_feature_names_out())
print("TF-IDF矩阵:\n", X.toarray().round(2))
 

输出

词表: ['ate' 'cat' 'dog' 'homework' 'mat' 'my' 'on' 'sat' 'the']
TF-IDF矩阵:
 [[0.   0.6  0.   0.   0.6  0.   0.45 0.45 0.38]  # cat/mat得分高
 [0.53 0.   0.53 0.53 0.   0.53 0.   0.   0.27]] # ate/dog/homework得分高
 

特点

  • 降低了常见词的权重(如"the")

  • 提升了关键词的重要性

  • 适合信息检索、关键词提取

方法3:Word2Vec(词嵌入)

核心思想:让意思相近的词在数字空间里位置也接近
类比:把单词放到地图上,"北京"和"上海"距离近,"西瓜"和"水果"距离近

from gensim.models import Word2Vec

sentences = [
    ["machine", "learning", "is", "fun"],
    ["deep", "learning", "uses", "neural", "nets"]
]

# 训练Word2Vec模型
model = Word2Vec(sentences, vector_size=3, window=2, min_count=1)

# 查看"learning"的词向量
print(model.wv["learning"])
 

输出示例

[ 0.012  0.456 -0.789]  # 3维向量

特点

  • 能捕捉语义关系(king - man + woman ≈ queen)

  • 需要大量训练数据

  • 适合需要理解语义的场景


三、如何选择方法?

场景推荐方法原因
垃圾邮件分类词袋/TF-IDF简单高效
电影评论情感分析TF-IDF需要突出情感词
智能客服问答系统Word2Vec/BERT需要理解语义相似度
新闻主题聚类TF-IDF + PCA降维后可视化

四、处理中文文本的特殊技巧

  1. 分词:英文有空格分隔,中文需要先分词

    import jieba
    text = "我喜欢机器学习"
    print(" ".join(jieba.cut(text)))  # 输出:我 喜欢 机器 学习
     
  2. 去除停用词:过滤掉"的/了/是"等无意义词

    stopwords = ["的", "了", "是"]
    words = [w for w in words if w not in stopwords]
     
  3. 词性过滤:只保留名词/动词等关键词语

    import jieba.posseg as pseg
    words = [word for word, flag in pseg.cut(text) if flag.startswith('n')]
     

五、完整文本处理流水线示例


六、动手实验建议

  1. 用TF-IDF处理豆瓣电影短评,看看哪些词对"好评/差评"影响最大

  2. 比较词袋和TF-IDF在新闻分类任务中的准确率差异

  3. 使用gensim训练自己的Word2Vec模型,找找"算法"最近的10个词

记住:文本特征提取是NLP的基石,掌握它你就打开了自然语言处理的大门!

Python文本特征提取是指利用Python编程语言文本数据中提取特征的过程。在自然语言处理(NLP)和文本挖掘等领域中,对文本进行特征提取可以将文本数据转化为可用于机器学习和统计分析的数字或向量表示。 Python提供了丰富的库和工具,可以用于文本特征提取。常见的特征提取方法包括词袋模型(Bag of Words)、TF-IDF、词频(Term Frequency)、逆文档频率(Inverse Document Frequency)等。 词袋模型是最常用的文本特征提取方法之一。它将文本数据表示为一个词汇表,并统计每个词汇的出现频率作为特征。Python的scikit-learn库提供了CountVectorizer类来实现词袋模型的特征提取。 TF-IDF是一种常用的用于衡量词语在文本文档和语料库中重要性的方法。通过计算词在文档中的频率和在整个语料库中的逆文档频率,得到每个词的TF-IDF值作为特征。scikit-learn库提供了TfidfVectorizer类用于实现TF-IDF特征提取。 词频和逆文档频率是构成TF-IDF方法的两个组成部分。词频衡量了词语在文档中的频率,逆文档频率衡量了词语在整个语料库中的重要性。使用Python的scikit-learn库可以计算并提取词频和逆文档频率作为文本特征。 除了以上常见的文本特征提取方法外,Python还可以使用正则表达式、n-gram模型、Word2Vec等方法进行文本特征提取。 总而言之,Python提供了丰富的库和工具,可以方便地进行文本特征提取。通过选择合适的特征提取方法,可以将文本数据转化为数字或向量表示,为后续的机器学习和统计分析任务奠定基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值