ING, 词频 INTROW FORMAT DELIMITEDFIELDS TERMINATED BY t;//创建一个具有文件名,词,词频字段的列分割符为制表符“t”的 Hive 表 Hive 表创建后,即可将预处理后的结构化文档数据平顺导入 Hive,关键代码如下: LOAD DATA LOCAL INPATH 预导入的文件名 OVERWRITE INTO TABLE 表名; 使用 LOCAL 选项将使数据导入本地文件系统,否则将导入 HDFS 文件系统。
使用OVERWRITE 选项将删除原来 Hive 表中的数据,否则将新数据添加到文件末尾,本文中文档相似度计算需要进行多文档的共词分析,需保留表中已导入的文档数据,因此不使用OVERWRITE 选项。
LOAD DATA 导入数据方式仅仅是将文件拷贝到 Hive 管理的目录下,并用 Hive 表的元数据去解释一个或多个文件。
所以必须保证所有的数据文件的结构必须和 Hive 表的结构一致,否则可以 LOAD DATA 成功但是数据解释不正确。
特别注意预处理文档中的列、列分隔符和行分隔符要与创建的 Hive 表保持一致。
4.4 相似度计算中的向量参数的计算 目前存在多种基于 VSM 的文档相似度算法,如贝叶斯算法、神经网络算法等。
本文采用“简单向量距离法”17,此算法将文档映射成向量空间中的点,点之间的距离用向量间的余弦夹角来度量,即表示了文档间的相似程度。
假设有 Di 和 Dj 两个不同的文档,经过特征向量选取后所得到的向量分别为: A fdi, Bfdj。
这里将 A 和 B 分别记为: A A1,…,Ai,…,An, B B1,…,Bi,…,Bn,其文档相似度为标准向量点积除以两个向量的长度积。
n ∑d ik × d jk simdi dj cosdi dj k 1 1 n n ∑ d ik ∑ d 2 2 jk k 1 k 1 其中,n 为向量维数,dk 为词语在文档中的第 k 维权值。
由1式可知,2 个文档 Di 和Dj 的词特征向量 A 和 B 的夹角余弦值越接近 1, 说明 2 个文档的向量间距离越短,相似度越大。
夹角余弦的几何意义是在由 N 个元素组成的 N 维空间中,表征两个向量之间夹角的余弦值。
一般在使用前需要对向量中的各元素进行无量纲化处理,使各元素都为正,这时夹角余弦的取值范围为0,1,取值越大表明两向量夹角越小,两者越接近,值为 1 时,两向量完全相同。
另外,夹角余弦规范化了向量的长度,这意味着在计算相似度时,不会放大数据对象重要部分的作用18。
“简单向量距离法”效率高,易于实现,相似度计算的精度能满足一般性的要求。
标准向量点本文通过文档 Di 的公共子向量集维度表示。
向量的长度本文通过文档 Di的特征向量集维度表示。
夹角余弦相似度公式转化为 文档Di的公共子向量维度 × 文档Dj的公共子向量维度 Sim(Di Dj) (2) 文档Di的特征向量维度 × 文档Dj的特征向量维度 在 Hive 平台中,通过 Hive SQL 语言实现文档 Di 的公共子向量集维度提取的关键代码如下: ResultSet rst stmt.executeQueryquotselect words from hiveTable wherestr_filename quot TarFileName.trim quotquot;//提取源文件 Di 中的词条 while rst.next //遍历所提取的词条 ResultSet rstcount stmtcount.executeQueryquotselect in_wordcount fromhiveTable where str_filenamequot ResFileName.trim quot and str_wordsquot rst.getString“words”.trim quotquot;//查询目标文件 Dj 中是否有该词条 if rstcount.next //该词条存在为真 wordsum_of_tar_in_res wordsum_of_tar_in_res rst.getInt“wordcount”;//将词频累加到文件的词向量值中 同理,本文提取文档 Dj 的公共子向量集维度、档 Di 的特征向量集维度和文档 Dj 的特征向量集维度,计算两个文档间的相似度。
当多文档相似度计算时,文档通过两个循环,结合 Hive 平台和关系数据库平台实现新导入文档和老文档的相似度计算遍历过程,关键代码如下:ResultSet rs stmt.executeQueryquotselect from postgresTable where sf_success Norder by sf_id ASCquot;//检索还没有完成相似度计算的新文档数据while rs.next //遍历还没有完成相似度计算的新文档数据 ResultSet rs_secRes stmt_secRes.executeQueryquotselect f.
上一篇:
基于Java的Web应用系统开发框架
下一篇:
倒着看世界