Datawhale《深度学习-NLP》Task2-NLP-特征提取

1. 基本文本处理技能

1.1 分词的概念(分词的正向最大、逆向最大、双向最大匹配法)

正向最大匹配法

 举例说明比如: 我爱北京天安门

 从左到右匹配 “我”先分词出来 然后剩下 “爱北京天安门” 在扫描 6 字词典匹配 匹配失败 “爱”

在把“北京天安门”在在5个字词典里面匹配 匹配成功就分一个词语,没有匹配成功就在分“北京”,剩下在匹配,以此类推。

逆向最大匹配法

与正向相反从右到左的顺序匹配字典。

双向最大匹配法

这个是结合正向和逆向匹配法进行比较,从而确定正确的分词方法。

算法流程:

比较正向最大匹配和逆向最大匹配结果,如果分词数量结果不同,那么取分词数量较少的那个,如果分词数量结果相同 ,分词结果相同,可以返回任何一个,分词结果不同,返回单字数比较少的那个。

代码实现:

  

# 导入扩展库
import re # 正则表达式库
import collections # 词频统计库
import numpy as np # numpy数据处理库
import jieba # 结巴分词
import os
base_dir = 'data/cnews'
train_dir = os.path.join(base_dir, 'news.txt')
def open_file(filename, mode='r'):
    """
    常用文件操作,可在python2和python3间切换.
    mode: 'r' or 'w' for read or write
    """
    return open(filename, mode, encoding='utf-8', errors='ignore')

def text_prosessing(string_data):
    # 文本预处理
    pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式
    string_data = re.sub(pattern, '', string_data) # 将符合模式的字符去除
    return string_data

def read_file(filename):
    """读取文件数据"""
    fn = open(train_dir)  # 打开文件
    string_data = fn.read()  # 读出整个文件
    fn.close()  # 关闭文件
    return text_prosessing(string_data)

def print_word_count(string_data):
    seg_list_exact = jieba.cut(string_data, cut_all=False)  # 精确模式分词
    object_list = []
    remove_words = [u'的', u',', u'和', u'是', u'随着', u'对于', u'对', u'等', u'能', u'都', u'。', u' ', u'、', u'中', u'在', u'了',
                    u'通常', u'如果', u'我们', u'需要']  # 自定义去除词库

    for word in seg_list_exact:  # 循环读出每个分词
        if word not in remove_words:  # 如果不在去除词库中
            object_list.append(word)  # 分词追加到列表

    # 词频统计
    word_counts = collections.Counter(object_list)  # 对分词做词频统计
    word_counts_top10 = word_counts.most_common(10)  # 获取前10最高频的词
    print(word_counts_top10)  # 输出检查


if __name__ == '__main__':
    print_word_count(read_file(train_dir))

输出结果:

 2. 语言模型

2.1 语言模型中unigram、bigram、trigram的概念;

unigram 一元分词,把句子分成一个一个的汉字。
bigram 二元分词,把句子从头到尾每两个字组成一个词语。
trigram 三元分词,把句子从头到尾每三个字组成一个词语。

比如:

西安交通大学:

unigram 形式为:西/安/交/通/大/学

bigram形式为: 西安/安交/交通/通大/大学

trigram形式为:西安交/安交通/交通大/通大学

import collections
import os
import wordCount
base_dir = 'data/cnews'
train_dir = os.path.join(base_dir, 'news.txt')
text = wordCount.read_file(train_dir)
unigram_counter = collections.Counter([text[i] for i in range(0, len(text))])
for k, v in unigram_counter.items():
    print(k, v)
bigram_counter = collections.Counter([(text[i], text[i + 1]) for i in range(0, len(text) - 1)])
for k, v in bigram_counter.items():
    print(k, v)
bigram_counter = collections.Counter([(text[i], text[i + 1], text[i + 2]) for i in range(0, len(text) - 2)])
for k, v in bigram_counter.items():
    print(k, v)

3.文本矩阵化采用的TF-idf模型

# -*- coding: utf-8 -*-
from sklearn.feature_extraction.text import TfidfVectorizer
import wordCount
import jieba
# 训练语料集路径
file_obj = open(wordCount.train_dir, "rb")
# 读取持久化后的对象
data_set = file_obj.read()
data_set = data_set.split()
file_obj.close()
sent_words = [list(jieba.cut(sent0)) for sent0 in data_set]
document = [" ".join(sent0) for sent0 in sent_words]
print(document)
tfidf_model = TfidfVectorizer().fit(document)
print(tfidf_model.vocabulary_)
sparse_result = tfidf_model.transform(document)
print(sparse_result)

输出结果如下:
['财经', '华夏 大盘 逆势 减仓 近 5% 大多数 基金 一季度 加仓 □ 晨报 记者 \xa0 李锐 在 一片 加仓声 中 , 一季度 减仓 的 基金 备受 市场 关注 , 而 华夏 大盘 就是 其中 一个 。 随着 一 季报 的 披露 , 来自 WIND 资讯 的 统计数据 显示 , 目前 大多数 开放式 偏股 型基金 的 仓位 普遍 上涨 , 平均 涨幅 达到 10 个 百分点 , 几乎 接近 牛市 的 仓位 水平 。 不过 , 作为 市场 里 的 最 赚钱 基金 之一 , 华夏 大盘 的 举动 颇受 关注 , 一季度 不但 没加仓 , 反而 大幅 减仓 近 5% 。 由此 看出 , 基金 对 后市 判断 的 分歧 日益 明显 。 华夏 大盘 仓位 下降 在 整体 乐观 声中 , 基金 的 一季度 股票 仓位 出现 上升 很 正常 , 但 如果 出现 下降 呢 ? 而 仓位 下降 的 基金 , 恰恰 又 是 “ 最 赚钱 基金 经理 ” 王亚伟 掌舵 的 华夏 大盘 呢 ? 刚刚 披露 的 一 季报 显示 , 不同于 大多数 偏股 型基金 , 华夏 大盘 的 股票 仓位 确实 降低 了 。 一 季报 显示 , 截至 3 月 31 日 , 华夏 大盘 的 股票 仓位 为 55.63% , 相比 去年 四季度 末 的 60.41% 的 股票 持仓 , 大幅 降低 了 4.78 个 百分点 。 换句话说 , 华夏 大盘 一季度 不但 没有 加仓 , 而是 大幅 减仓 近 5% , 这 与 大多数 同 类型 基金 的 做法 恰好相反 。 同时 , 根据 一 季报 , 华夏 大盘 净值 增长率 为 37.76% , 同期 业绩 排在 偏股 型基金 前十名 。 来自 WIND 资讯 的 统计数据 显示 , 在 率先 披露 一 季报 的 105 只 偏股 型基金 中 , 股票 仓位 平均 达到 76.51% , 而 与 牛市 平均 79.1% 的 水平 相差无几 。 不过 , 相比 去年 四季度 末 , 在 短短 三个 月 的 时间 里 , 基金 的 股票 仓位 涨幅 “ 惊人 ” , 平均 增加 近 10 个 百分点 。 资料 显示 , 2008 年末 , 基金 的 股票 平均 仓位 为 66.78% 。 制造 、 石化 减持 较 多 而 从 行业 配置 来看 , 华夏 大盘 整体 减仓 幅度 不 大 , 在 行业 选择 上 变动 也 不 特别 明显 , 但 部分 行业 还是 减持 较 多 。 一 季报 显示 , 华夏 大盘 尽管 整体 股票 仓位 不高 , 但 制造业 以 22.28% 的 占 比 , 几乎 占据 其 股票 仓位 的 “ 半壁江山 ” 。 不过 , 与 去年 四季度 相比 , 制造业 当时 占 比 达到 26.59% , 短短 三个 月 时间 内 减仓 幅度 达到 4.31 个 百分点 。 此外 , 石油 、 化学 、 塑胶 、 塑料 板块 也 得到 类似 遭遇 , 其 最新 占 比 为 4.59 个 百分点 , 相比 去年 四季度 的 10.69 个 百分点 , 降幅 也 达到 6.1 个 百分点 。 而 在 加仓 的 板块 中 , 机械 、 设备 、 仪表 行业 增持 比较 明显 , 其 最新 占 比 为 6.18% , 相比 去年末 加仓 3.34 个 百分点 。 对于 金融保险 和 房地产 , 华夏 大盘 同样 采取 减持 策略 , 三个 月 时间 减少 3.45 个 百分点 。 不过 , 这 与 其它 同 类型 基金 形成 鲜明对比 , 一季度 基金 加仓 最 多 的 行业 包括 金融保险 和 房地产 。 其中 , 基金 持有 金融保险 的 仓位 比例 从 上 一 季末 的 12.35% 上升 了 6.4 个 百分点 , 而 房地产业 也 上升 近 2 个 百分点 。 后市 判断 偏 谨慎 展望 后市 , 王亚伟 的 态度 非常 谨慎 。 他 表示 , 股市 的 大幅 上涨 , 已经 比较 充分 地 反映 了 投资者 对 未来 经济 快速 复苏 的 乐观 预期 , 而 在 充足 流动性 的 助推 下 , 股市 整体 的 估值 水平 相对 上市公司 的 业绩 状况 甚至 已经 有所 透支 。 此外 , 市场 整体 换手率 处于 历史 高位 , 显示 投机 力量 主导 了 市场 , 预计 二季度 市场 有望 维持 活跃 , 但 资产 泡沫化 的 风险 值得 警惕 。 不过 , 大多数 基金 经理 的 判断 依然 乐观 。 其中 , 国投 瑞银 创新 动力 认为 , 中国 经济 有 可能 最先 从 经济 低谷 中 开始 复苏 , 主要 借助于 政府 投资 拉动 和 信贷 放松 后 私人 投资 的 启动 , 仍然 对 经济 和 股票市场 持 较为 乐观 的 态度 , 并且 认为 在 这个 阶段 , 周期 类 行业 会 率先 复苏 , 而 消费类 行业 的 恢复 会 滞后 于 经济周期 。 资料 显示 , 国投 瑞银 创新 动力 最新 股票 仓位 为 94.26% , 已经 非常 接近 95% 的 上限 。']
{'财经': 227, '华夏': 86, '大盘': 116, '逆势': 236, '减仓': 66, '大多数': 114, '基金': 104, '一季度': 28, '加仓': 79, '晨报': 163, '记者': 224, '李锐': 171, '一片': 29, '加仓声': 80, '备受': 112, '市场': 125, '关注': 62, '就是': 121, '其中': 63, '一个': 27, '随着': 247, '季报': 118, '披露': 147, '来自': 173, 'wind': 26, '资讯': 230, '统计数据': 214, '显示': 162, '目前': 198, '开放式': 131, '偏股': 58, '型基金': 103, '仓位': 49, '普遍': 164, '上涨': 33, '平均': 127, '涨幅': 187, '达到': 233, '10': 0, '百分点': 197, '几乎': 69, '接近': 155, '牛市': 189, '水平': 180, '不过': 38, '作为': 53, '赚钱': 231, '之一': 45, '举动': 44, '颇受': 251, '不但': 36, '没加仓': 181, '反而': 92, '大幅': 115, '由此': 196, '看出': 202, '后市': 98, '判断': 74, '分歧': 71, '日益': 159, '明显': 161, '下降': 35, '整体': 158, '乐观': 46, '声中': 110, '股票': 218, '出现': 70, '上升': 31, '正常': 176, '如果': 117, '恰恰': 139, '经理': 213, '王亚伟': 193, '掌舵': 153, '刚刚': 72, '不同于': 37, '确实': 206, '降低': 245, '截至': 141, '31': 8, '55': 15, '63': 18, '相比': 201, '去年': 89, '四季度': 101, '60': 17, '41': 12, '持仓': 149, '78': 22, '换句话说': 151, '没有': 182, '而是': 216, '类型': 210, '做法': 59, '恰好相反': 138, '同时': 95, '根据': 175, '净值': 65, '增长率': 109, '37': 11, '76': 21, '同期': 96, '业绩': 40, '排在': 154, '前十名': 77, '率先': 192, '105': 1, '51': 14, '79': 23, '相差无几': 200, '短短': 203, '三个': 30, '时间': 160, '惊人': 140, '增加': 107, '资料': 229, '2008': 4, '年末': 128, '66': 19, '制造': 75, '石化': 204, '减持': 68, '行业': 220, '配置': 241, '来看': 172, '幅度': 126, '选择': 237, '变动': 93, '特别': 190, '部分': 240, '还是': 234, '尽管': 122, '不高': 39, '制造业': 76, '22': 5, '28': 7, '占据': 87, '半壁江山': 85, '当时': 132, '26': 6, '59': 16, '此外': 177, '石油': 205, '化学': 84, '塑胶': 106, '塑料': 105, '板块': 174, '得到': 134, '类似': 209, '遭遇': 239, '最新': 166, '69': 20, '降幅': 246, '机械': 170, '设备': 225, '仪表': 50, '增持': 108, '比较': 179, '18': 3, '去年末': 90, '34': 9, '对于': 120, '金融保险': 243, '房地产': 142, '同样': 97, '采取': 242, '策略': 208, '减少': 67, '45': 13, '其它': 64, '形成': 133, '鲜明对比': 254, '包括': 83, '持有': 150, '比例': 178, '季末': 119, '12': 2, '35': 10, '房地产业': 143, '谨慎': 226, '展望': 123, '态度': 136, '非常': 248, '表示': 221, '股市': 217, '已经': 124, '充分': 60, '反映': 91, '投资者': 146, '未来': 169, '经济': 211, '快速': 135, '复苏': 113, '预期': 249, '充足': 61, '流动性': 185, '助推': 82, '估值': 51, '相对': 199, '上市公司': 32, '状况': 191, '甚至': 195, '有所': 167, '透支': 238, '换手率': 152, '处于': 111, '历史': 88, '高位': 253, '投机': 144, '力量': 78, '主导': 42, '预计': 250, '二季度': 47, '有望': 168, '维持': 215, '活跃': 184, '资产': 228, '泡沫化': 183, '风险': 252, '值得': 57, '警惕': 222, '依然': 54, '国投': 102, '瑞银': 194, '创新': 73, '动力': 81, '认为': 223, '中国': 41, '可能': 94, '最先': 165, '低谷': 52, '开始': 130, '主要': 43, '借助于': 56, '政府': 157, '投资': 145, '拉动': 148, '信贷': 55, '放松': 156, '私人': 207, '启动': 99, '仍然': 48, '股票市场': 219, '较为': 232, '并且': 129, '这个': 235, '阶段': 244, '周期': 100, '消费类': 186, '恢复': 137, '滞后': 188, '经济周期': 212, '94': 24, '95': 25, '上限': 34}
  (0, 227)    1.0
  (1, 254)    0.02284558311924767
  (1, 253)    0.02284558311924767
  (1, 252)    0.02284558311924767
  (1, 251)    0.02284558311924767
  (1, 250)    0.02284558311924767
  (1, 249)    0.02284558311924767
  (1, 248)    0.04569116623849534
  (1, 247)    0.02284558311924767
  (1, 246)    0.02284558311924767
  (1, 245)    0.04569116623849534
  (1, 244)    0.02284558311924767
  (1, 243)    0.068536749357743
  (1, 242)    0.02284558311924767
  (1, 241)    0.02284558311924767
  (1, 240)    0.02284558311924767
  (1, 239)    0.02284558311924767
  (1, 238)    0.02284558311924767
  (1, 237)    0.02284558311924767
  (1, 236)    0.02284558311924767
  (1, 235)    0.02284558311924767
  (1, 234)    0.02284558311924767
  (1, 233)    0.11422791559623835
  (1, 232)    0.02284558311924767
  (1, 231)    0.04569116623849534
  :    :
  (1, 24)    0.02284558311924767
  (1, 23)    0.02284558311924767
  (1, 22)    0.04569116623849534
  (1, 21)    0.04569116623849534
  (1, 20)    0.02284558311924767
  (1, 19)    0.02284558311924767
  (1, 18)    0.02284558311924767
  (1, 17)    0.02284558311924767
  (1, 16)    0.04569116623849534
  (1, 15)    0.02284558311924767
  (1, 14)    0.02284558311924767
  (1, 13)    0.02284558311924767
  (1, 12)    0.02284558311924767
  (1, 11)    0.02284558311924767
  (1, 10)    0.02284558311924767
  (1, 9)    0.02284558311924767
  (1, 8)    0.04569116623849534
  (1, 7)    0.02284558311924767
  (1, 6)    0.04569116623849534
  (1, 5)    0.02284558311924767
  (1, 4)    0.02284558311924767
  (1, 3)    0.02284558311924767
  (1, 2)    0.02284558311924767
  (1, 1)    0.02284558311924767
  (1, 0)    0.068536749357743

Process finished with exit code 0


猜你喜欢

转载自blog.csdn.net/cs123456789dn/article/details/88174800
今日推荐