问答系统慢慢的成为非常流行且非常实用的应用,成为越来越多的研究者的研究方向。当前问答系统有基于知识库的问答系统,对话系统以及聊天机器人。

在问答系统中,当用户想要利用问答系统搜索到与自己提出 query相同或相似的问题及其答案时,由于用户输入 query都是自己描述的,比较口语化,且有错别字,歧义等,其结构复杂和句式冗长,使得从问句中提取重要关键词项会比较困难(提出的关键词质量不高,词不达意的现象)。因无法准确获取问句中的核心关键词,导致搜索的结果不够准确,故需要对其输入的 query中的关键词进行同义词扩展。

当用户在使用问答系统搜索时,为了能够将与用户所输入 query 的关键词进行同义词相匹配,使其能够得到较好的搜索结果,采用基于同义词的搜索请求 (query) 扩展,即在利用 query 进行搜索的同时也利用 query 的同义词进行搜索,提高搜索结果召回的质量。

以上说明同义词替换在检索系统中的基础性和必要性。

最近有接触到基于知识库的问答系统的项目,需要对关键词进行同义词扩展,提高搜索效率。

同义词的扩展,这里不详述展开。

程序中设计到分词技术和同义词表,分词采用了哈工大的pyltp,其官方文档链接为http://pyltp.readthedocs.io/zh_CN/latest/。同义词表是利用哈工大的同义词词林(扩展版)进行预处理保留每个词的前两项得来的,原版下载链接为https://www.ltp-cloud.com/download/(但好像网页不存在了)。

同义词替换代码如下:

这里用的是哈工大的pyltp分词包,加载了自定义词典。发现一处免费下载的地址:LTP模型

哈工大pyltp分词:

# -*- coding: utf-8 -*-
import os
LTP_DATA_DIR = 'ltp_data_v3.4.0'  # ltp模型目录的路径
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径,模型名称为`cws.model`from pyltp import Segmentor
segmentor = Segmentor()  # 初始化实例
segmentor.load(cws_model_path)  # 加载模型
words = segmentor.segment('元芳你怎么看')  # 分词
print ('\t'.join(words))
segmentor.release()  # 释放模型

结果:

元芳   你   怎么  看Process finished with exit code 0

同义词替换程序: 

# -*- coding: utf-8 -*-
#加载自定义词典from pyltp import Segmentorclass SynonymsReplacer:def __init__(self, synonyms_file_path, cws_model_path,userdict_file_path):self.synonyms = self.load_synonyms(synonyms_file_path)self.segmentor = self.load_segmentor(cws_model_path,userdict_file_path)def __del__(self):"""对象销毁时要释放pyltp分词模型"""self.segmentor.release()def load_segmentor(self, cws_model_path,userdict_file_path):"""加载ltp分词模型:param cws_model_path: 分词模型路径:return: 分词器对象"""segmentor = Segmentor()segmentor.load_with_lexicon(cws_model_path,userdict_file_path)return segmentordef segment(self, sentence):"""调用pyltp的分词方法将str类型的句子分词并以list形式返回"""return list(self.segmentor.segment(sentence))def load_synonyms(self, file_path):"""加载同义词表:param file_path: 同义词表路径:return: 同义词列表[[xx,xx],[xx,xx]...]"""synonyms = []with open(file_path, 'r', encoding='utf-8') as file:for line in file:synonyms.append(line.strip().split(' '))return synonymsdef permutation(self, data):"""排列函数:param data: 需要进行排列的数据,列表形式:return:"""assert len(data) >= 1, "Length of data must greater than 0."if len(data) == 1:  # 当data中只剩(有)一个词及其同义词的列表时,程序返回return data[0]else:head = data[0]tail = data[1:]  # 不断切分到只剩一个词的同义词列表tail = self.permutation(tail)permt = []for h in head:  # 构建两个词列表的同义词组合for t in tail:if isinstance(t, str):  # 传入的整个data的最后一个元素是一个一维列表,其中每个元素为strpermt.extend([[h] + [t]])elif isinstance(t, list):permt.extend([[h] + t])return permtdef get_syno_sents_list(self, input_sentence):"""产生同义句,并返回同义句列表,返回的同义句列表没有包含该句本身:param input_sentence: 需要制造同义句的原始句子:return:"""assert len(input_sentence) > 0, "Length of sentence must greater than 0."seged_sentence = self.segment(input_sentence)candidate_synonym_list = []  # 每个元素为句子中每个词及其同义词构成的列表for word in seged_sentence:word_synonyms = [word]  # 初始化一个词的同义词列表for syn in self.synonyms:  # 遍历同义词表,syn为其中的一条if word in syn:  # 如果句子中的词在同义词表某一条目中,将该条目中它的同义词添加到该词的同义词列表中syn.remove(word)word_synonyms.extend(syn)candidate_synonym_list.append(word_synonyms)  # 添加一个词语的同义词列表perm_sent = self.permutation(candidate_synonym_list)  # 将候选同义词列表们排列组合产生同义句syno_sent_list = [seged_sentence]for p in perm_sent:if p != seged_sentence:syno_sent_list.append(p)return syno_sent_listif __name__ == '__main__':replacer = SynonymsReplacer(synonyms_file_path='tongyici.txt', cws_model_path='ltp_data_v3.4.0/cws.model',userdict_file_path = 'userdict.txt')test_sentence = '欠债不还犯法吗'_syn = replacer.get_syno_sents_list(test_sentence)for s in _syn:print(s)

测试例子的替换结果:

参考:https://blog.csdn.net/hfutdog/article/details/81107170

ltp工具包下载:https://download.csdn.net/download/weixin_40547993/11141737

Python实现同义词替换(哈工大pyltp分词)相关推荐

  1. python同义词替换(jieba分词)

    python同义词替换(jieba分词) TihuanWords.txt文档格式 注意:同一行的词用单个空格隔开,每行第一个词为同行词的替换词. 年休假 年假 年休 究竟 到底 回家场景 我回来了 代 ...

  2. python汉字同义词替换_python同义词替换的实现(jieba分词)

    TihuanWords.txt文档格式 注意:同一行的词用单个空格隔开,每行第一个词为同行词的替换词. 年休假 年假 年休 究竟 到底 回家场景 我回来了 代码 import jieba def re ...

  3. python汉字同义词替换_用WordNet和NLTK-python替换语料库中的同义词

    尝试编写简单的python脚本,该脚本将使用NLTK查找和替换txt文件中的同义词. 以下代码给出错误:Traceback (most recent call last): File "C: ...

  4. python汉字同义词替换_python同义词替换

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. pyltp实体识别_哈工大 PYLTP 安装 排坑指南

    0 哈工大 PYLTP 简介 pyltp 是 LTP 的 Python 封装,提供了分词,词性标注,命名实体识别,依存句法分析,语义角色标注的功能. github网址:HIT-SCIR/pyltp 在 ...

  6. 文本数据增强-同义词替换、随机交换、随机插入、随机删除

    根据zhangy代码改写,主要针对千言问题匹配进行文本数据增强. 依赖安装 pip install jieba pip install synonyms eda.py import jieba imp ...

  7. 哈工大pyltp安装和使用方法

    2022.4.18最新哈工大pyltp安装和使用过程总结: 1.本机最开始使用的是Python3.7.最开始一直执着于找到3.7对应的wheel,以及在pycharm中调用代码,一直不成功.体现在Py ...

  8. python pandas DataFrame 替换 NaN 值 和 删除 NaN 所在的行。

    python pandas DataFrame 替换 NaN 值 和 删除 NaN 所在的行. import pandas as pd import numpy as np df1 = pd.Data ...

  9. Py之jieba:Python包之jieba包(中文分词最好的组件)简介、安装、使用方法之详细攻略

    Py之jieba:Python包之jieba包(中文分词最好的组件)简介.安装.使用方法之详细攻略 目录 jieba简介 jieba安装 jieba使用方法 1.进行分词 jieba简介 jieba应 ...

  10. Qt + Python + OpenCV图标替换工具 之 Qt界面设计(四)

    目录 上一篇博文 程序的下载地址以及源码 Qt界面设计 上一篇博文 Qt + Python + OpenCV图标替换工具 之 Python调用dll(三) https://blog.csdn.net/ ...

最新文章

  1. 验证 Boost.Optional 复制构造函数不会尝试调用从模板化参数初始化构造函数的元素类型
  2. linux集群命令关闭其中一台,自己整理的一点Linux命令集
  3. win10 利用安装包 安装 ssh
  4. python运维开发_Python自动化运维开发----基础(一)
  5. Exchange server 2003迁移到2010无路由组连接器
  6. UI设计素材|等轴测图(2.5D插画)
  7. 魔鬼的梦魇—验证IE中的js内存泄露模式(三)
  8. 他是第一个到达学校的人英语_孩子学英语效果慢?那是因为孩子还没学会掌握“自然拼读”...
  9. SQOOP的安装配置_Linux伊甸园开源社区-24小时滚动更新开源资讯,全年无休!
  10. Linux操作系统课后参考答案
  11. 常用网线T568A或T568B类型详细讲解
  12. 初唐名臣---凌烟阁上二十四功臣
  13. 风流霸主姜小白-第1章 姜太公劳苦功高始建齐 周幽王荒淫无度葬西周
  14. google 卫星地图
  15. 福禄克FLUKE TIX650红外热像仪3.5英寸高像素大屏
  16. 4.默认参数,不定参数,扩展参数
  17. 【案例教程】基于RWEQ模型的土壤风蚀模数估算及其变化归因分析实践技术
  18. 红黑树从头至尾插入和删除结点的全程演示图
  19. Nest.js模块机制的概念和实现原理
  20. 洛谷 租用游艇 C++ Dijkstra 单源最短路/dp

热门文章

  1. 【嵌入式开发】SIP信令交互总结(1)
  2. python 游戏屏蔽了模拟键盘_单机游戏下载:专业模拟飞行11 专业飞行模拟11 v11.41r1|容量62GB|官方简体中文|支持键盘.鼠标...
  3. socket里sendto()函数
  4. 贝叶斯决策matlab模拟
  5. Android第四次作业
  6. 字节跳动python面试题校招_字节跳动校招----编程题(Python)
  7. java swing高仿qq聊天_GitHub - sxei/myqq: Java版SWing“高”仿QQ即时通聊天系统
  8. 操作系统原理与Linux实践教程申丰山版习题2的2-3答案
  9. 手机怎样查看计算机使用记录,如何查看电脑使用记录
  10. LTE的基础知识与关键技术