其他分享
首页 > 其他分享> > 关于如何处理多对多的逻辑问题

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

作者:互联网

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