ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于如何处理多对多的逻辑问题

2019-02-27 10:54:28  阅读:440  来源: 互联网

标签:近义词 逻辑 synonym 处理 text syn 孵化器 关于 table


1.多对多的理解:

    一对一的理解:就是一个班主任只属于一个班级,一个班级也只能有一个班主任。这就是对于一对一的理解,一一对应是很容易处理的问题,这是数据库里比较常见的。   

    一对多: 一个顾客对应多个订单,而一个订单只能对应一个客户

    多对一:多个客户可以在同一个商家对同一件商品下单。

    多对多: 一个用户可以属于多个集体(家人,朋友,同学),当然一个集体也包含了多个用户。

2.遇到问题时的处理:

   最近遇到近义词处理问题,即“近义词-政策”的关系。一个词可能是多个政策的近义词,一个政策也有多个近义词。语料如下:

"高新技术企业","国家级高新技术企业认定"
"高新技术企业","市级高新技术企业认定"
#以上属于一对多的情况
"企业孵化器认定","企业孵化器认定"
"企业孵化器","企业孵化器认定"
"孵化器认定","企业孵化器认定"
"孵化器","企业孵化器认定"
#这属于多对一的情况

这里处理有两个难点:

1.同一近义词对于多个政策的替换。

2.一个近义词有可能是另一个近义词的子串。子串的存在就不能直接使用替换来解决了。

我的思路是这样:

对于第一个问题,同近义词的政策实行字符串拼接,这样能够保证每个近义词的唯一性。

对于第二个问题,实行同义词替换,找到一个中间的字符串替换。匹配规则是从最长的子串匹配,符合匹配规则,直接使用中间字符串替换。中间字符串则保存成字典,检查替换完所有的近义词后,然后从字典中取值,再次替换为原来的字符串。字典的存在也能够保证,即使出现和中间字符串同名的情况,也能够正常处理。

def read_csv(self):#csv转化为字典,将多对多的情况。
        filename = 'Synonym_Rasa.csv'
        with open(filename) as f:
            reader = csv.reader(f)
            synonym_table = list(reader)
            synonym_list = []
            count = 0
            for syn in synonym_table:
                if syn[1] not in synonym_list:
                    synonym_list.append(syn[1])
                else:
                    index1 = synonym_list.index(syn[1])
                    synonym_table[index1][2] = synonym_table[index1][2] +' '+syn[2]
                    synonym_table.pop(count)
                count += 1    
        return synonym_table
    
def processing(self,text,synonym_table):
        #把字典转化为第三方形式,防止影响后面的程序。
        extract_dic = {}
        a = 0
        old_text = text
        for syn_line in synonym_table:
            if syn_line[1] in text:
                print(syn_line[1])
                topic = 'topic'+str(a)
                print(topic)
                text = text.replace(syn_line[1],topic)
                extract_dic[topic] = syn_line[2]
                # print(text)
                a += 1
        # print(text)
        for syn_value in extract_dic:
            text = text.replace(syn_value,extract_dic[syn_value])

这样感觉就完美的解决了这个问题。

如果有更好的方法,欢迎指教!!!

标签:近义词,逻辑,synonym,处理,text,syn,孵化器,关于,table
来源: https://blog.csdn.net/u010883226/article/details/87967379

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有