这是本文档旧的修订版!
Xin An, Jinghong Li, Shuo Xu, Liang Chen, and Wei Sun, 2021. An Improved Patent Similarity Measurement based on Entities and Semantic Relations. Journal of Informetrics.
安装好模块后,进入python环境,下载wordnet资源:
> import nltk > nltk.download('wordnet') > nltk.download("wordnet_ic")
code_review:
├─ TFH_Annotated_Dataset
│ ├─ 4036723.ann
│ ├─ 4036723.txt
│ ├─ 4040113.ann
│ ├─ 4040113.txt
│ ├─ …
│ └─ …
├─ gen_similarity_matrix.py
├─ gen_similarity_score.py
├─ gen_weight.py
├─ save_ERE.py
├─ ot.c
├─ ot.m
├─ ot_mex.c
├─ ot_mex.mexw64
├─ word_sim_dict.pickle
└─ readme.md
测试数据来源:https://github.com/awesome-patent-mining/TFH_Annotated_Dataset
该数据集来自硬盘驱动器领域的薄膜磁头子领域,总共包含1010个相关专利的标题摘要(.txt)及其相应的标注信息(.ann)。
下载以上数据,并保存在TFH_Annotated_Dataset文件夹下,下面将根据论文所提出的方法计算数据集专利之间的相似度。
运行文件save_ERE.py在原始文件中读取序列结构并保存,该步骤生成两个文件ERE.json和patent_list.json,前者保存了序列结构信息,后者保存了专利代码信息。
> python ./save_ERE.py
运行文件gen_similaity_matrix.py计算两两专利之间序列结构的相似性矩阵,并保存在similarity_matrix文件夹下(该文件夹下的文件以专利代码命名,保存该专利与其他所有专利的相似度矩阵信息)
python ./gen_similarity_matrix.py
Note:
1)根据序列结构的关系确定语义方向,并修改gen_similarity_matrix.py文件中的一下语句:
if __name__ == "__main__": ... # 本数据集中关系对应的语义方向 underection = ['Spatial', 'Alias', 'Comparison', 'Others'] left = ["PartOf", "Causitive", "Oper", "MadeOf", "Attr", "Generate", "Purpose", "Manner", "Measurement"] right = ["Form", "InstanceOf"] ...
2)每两个单词之间的相似度都是基于WordNet计算而得,而通过API频繁调用WordNet会导致程序计算效率低下,因此用word_sim_dict.pickle文件记录已经计算过的单词之间的相似度。该数据集第一次运行程序时,计算1010个专利两两之间的相似度矩阵大约需要四五天时间,当把所有需要通过WordNet比较的单词相似度记录下来后,只要不修改WordNet的设定,以后重跑时可以直接读取单词的相似度,只需花费几小时即可。
运行文件gen_weight.py以计算每个专利各个序列结构的权重,生成权重文件ERE_weight_dict.json
python ./gen_weight.py
运行文件gen_similarity_score.py计算专利相似度,结果保存在similarity_weighted.xlsx以及similarity_nonweighted.xlsx文件中,前者基于step 3的权重,后者基于相同权重。
python ./gen_similarity_score.py
Note: 此处采用的最优运输问题算法是基于 Matlab 和 C 语言写的(ot.c, ot.m, ot_mex.c, ot_mex.mexw64),该步骤只是通过 Python 调用 Matlab API,因此确保电脑装有Matlab2018b以上版本,并设置好相应的环境,可参考:https://zhuanlan.zhihu.com/p/47655091
该数据集该步骤会花费大约十个小时。
评论