一、数据介绍
输入文件中共508篇新闻报道
[liujie@master tfidf_articles]$ ls input_tfidf_dir | wc -l
508
其中,每个文件中的格式如下:
[liujie@master input_tfidf_dir]$ cat 287it.seg.cln.txt
北京 音响展 精彩 好 声音 北京 国际 音响展 落幕 搜狐 数码
日 , 为期 三 天 的 北京 国际 音响展 在 中国 国家 会议 中心 进行 得 如火如荼 , 作为 全国 最 有 影响力 的 顶级 音响 汇聚 地 、 爱好者 的 朝拜 圣地 , 记者 在 现场 充分 体会 到 了 音响展 的 独特 魅力 。 北京 国际 音响展 作为 国内 久负盛名 的 一流 展会 , 多年 来 一直 是 产业 高端 技术 的 风向标 , 在 本届 展会 上 , 记者 就 看到 了 诸如 美国 魔声 、 天朗 、 瑞士 瑞宝 、 欧尼士 、 德国 、 英国 音乐 传 声 等等 一 批 国际 顶尖 品牌 , 吸引 了 众多 资深 发烧友 引颈 观看 。
听众 在 现场 聆听 美妙 音乐
开展 第一 天 虽然 不是 周末 , 但 这些 顶级 的 [| 音响 设备 |] 还是 吸引 了 不少 发烧 级 爱好者 到 现场 参观 。 一 位 现场 的 观众 表示 : 这些 动辄 上 百万 的 高端 音响 产品 , 一直 是 只 闻其 名 未 听 其 声 , 这次 知道 有 这么 个 展会 , 我 早就 请 好 假 , 做好 好好 的 享受 一番 的 准备 了 。 据 笔者 现场 体验 , 这些 高端 产品 的 音效 即使 细微 之 处 也 纤毫 毕露 、 毫无 杂质 , 确实 不同凡响 。 相 较 于 往届 , 本届 音响展 除了 一如既往 地 尽 展 顶尖 产品 风采 之外 , 还 吸引 了 不少 了 经济型 的 音响 品牌 , 包括 一些 我们 所 熟悉 的 国内 品牌 。 博远 音响 展会 负责人 告诉 记者 : 相对 于 国际性 的 老牌 高端 音响 产品 , 国产 品牌 的 价位 在 大众 消费群 里 更 具 亲和力 。 日 中午 , 被 很 多 与会者 期待 的 好 声音 等 你 秀 活动 正式 开始 , 周六 的 主题 是 音源 秀 。 随着 主持人 宣布 比赛 开始 , 众多 参赛者 按 顺序 登台 秀 自己 的 好 声音 作品 , 同时 , 为了 博得 现场 观众 和 专家 评委 的 认可 还 声情并茂 地 介绍 自己 采集 声源 的 有趣 情景 。 例如 , 一个 参赛者 提交 的 作品 是 婴儿 清脆 的 啼哭声 , 他 在 给 大家 展示 声音 时 不 忘 给 大家 讲述 初 为人 父 者 孩子 出生 之 时 的 狼狈 、 喜悦 与 感动 , 使得 现场 融洽 温馨 , 笑声 不断 。 另外 , 主办方 在 活动 中 还给 大家 展现 了 一 种 让 人 耳目一新 的 艺术形式 微声 剧 , 即 仅仅 通过 声音 来 制造 一 段 有 故事 、 有 内容 的 、 像 电影 一样 的 情节 。 据悉 : 主办方 已经 在 时代 [| 门户 网站 |] 上 开展 了 长期 的 微声 剧 征集 活动 。
获奖者 合影
在 日 的 活动 主题 为 方言 秀 , 需要 观众 上台 用 自己 家乡 的 话说 一 句 有关 绿色 、 环保 的 话 。 因为 参与 难度 低 现场 参观者 的 热情 都 非常 高 。 最 具 喜 感 的 是 一个 东北 小伙 的 小沈阳 式 方言 , 最 难听 明白 的 是 广东 方言 , 让 听众 们 颇 感 享受 的 则 是 一个 江南 女孩 的 吴侬 软语 。 天南地北 的 声音 凑 在 一起 说 着 差 不 多 的 话 , 既 让 现场 的 观众 玩儿 的 很 , 也 在 不知 不觉 中 宣传 了 环保 理念 。
一 位 上海 大爷 正在 秀 自己 的 家乡话
参赛者 表演 结束 后 , 通过 专家 点评 和 观众 投票 , 评选 出 当天 的 最佳 好 声音 , 并 给 获奖者 颁发 了 丰厚 的 奖品 和 [| 获奖 证书 |] 。 本届 北京 国际 影响 展 坚持 了 其 一贯 的 高端性 和 专业性 , 同时 , 也 通过 一 系列 的 活动 吸引 了 更 多 爱好者 的 关注 和 参与 。 作为 北京市 第七 届 文博会 的 一个 重要 组成部分 , 音响展 很 好 地 诠释 了 文化 、 科技 与 创意 的 完美 结合 。
分享
可以发现:文章已经用空格为间隔符进行分词,有些单词与空格和逗号相连,需要处理
二、代码介绍
convert.py
:由于原始文件中每篇新闻都在一个文件中,因此需要将508篇文章统一合并到一个文档中,每一行代表一篇文章
import sys
import os
# 命令行参数—要处理的文件路径
file_path_dir = sys.argv[1]
def read_file_handler(f):
"""
定义读取文件的函数
:param f: 文件路径
:return:
"""
fd = open(f, 'r')
return fd
file_name = 0
for pd in os.listdir(file_path_dir):
content_list = []
# 路径拼接
file_path = file_path_dir + "/" + pd
# 读取每个文件
fd = read_file_handler(file_path)
# 遍历文件每一行并添加到列表中
for line in fd:
content_list.append(line.strip())
print('\t'.join([str(file_name), ' '.join(content_list)]))
file_name += 1
使用命令行
(py36pt) [root@master tfidf_articles]# python convert.py input_tfidf_dir > tfidf_input.data
就可以生成需要的tfidf_input.data文件,其格式为:
map.py
:统计每篇文章出现的词
import sys
for line in sys.stdin:
line.strip()
ss = line.strip().split('\t')
if len(ss) != 2:
continue
file_name, file_content = ss
word_list = file_content.strip().split(' ')
# 得到每篇文章的词表集合
word_set = set(word_list)
for word in word_set:
print('\t'.join([word, '1']))
使用命令行:
(py36pt) [root@master tfidf_articles]# cat tfidf_input.data | python map.py
就可以得到
使用命令行
(py36pt) [root@master tfidf_articles]# cat tfidf_input.data | python map.py | sort -k1 -nr
就可以输出并按照第一个字排序。
reduce.py
:计算排序后map的idf
import sys
import math
current_word = None
count = 0
doc_cnt = 508
for line in sys.stdin:
ss = line.strip().split('\t')
if len(ss) != 2:
continue
word, val = ss
if current_word == None:
current_word = word
# 计算idf
if current_word != word:
idf = math.log10(doc_cnt / (float(count) + 1.0))
print('\t'.join([current_word, str(idf)]))
current_word = word
count = 0
count += int(val)
# 当循环结束时,最后一个词的idf未计算
idf = math.log10(doc_cnt / (float(count) + 1.0))
print('\t'.join([current_word, str(idf)]))
使用命令行
(py36pt) [root@master tfidf_articles]# cat tfidf_input.data | python map.py | sort -k1 -nr | python reduce.py
就可以得到如下结果:
(py36pt) [root@master tfidf_articles]# cat tfidf_input.data | python map.py | sort -k1 -nr | python reduce.py | grep '的'
有的 2.972384909557
似的 5.131869158910372
目的 3.2860424684120413
美的电器 4.844187086458591
美的 3.6655320901169453
浪漫的事 5.537334267018537
的确 3.0524276172305362
的 0.0019704439872987385
成长的烦恼 5.537334267018537
别的 4.6210435351443815
标的 4.844187086458591