【问题标题】:Is there a way to keep count of number of occurrences of word pairs in a list of sentences?有没有办法计算句子列表中单词对的出现次数?
【发布时间】:2020-10-08 19:06:47
【问题描述】:

我有一个单词对列表,我必须检查每个单词对是否出现在句子列表中的每个句子中。 例如: 单词对列表是这样的:

[(mary,little),(mary,lamb),(mary,jack),(mary,jill),(little,lamb),(little,Jack),(little,Jill),(lamb,jack),(lamb,jill),(jack,jill)]

句子列表是:

['Mary had a little lamb','Jack and Jill went up the hill']

输出应该是这样的,对于每个句子,每个单词对的出现次数都被计算在内。在这个例子中,第一句话的单词对数为

[(mary,little):1,(mary,lamb):1,(mary,jack):0,(mary,jill):0,(little,lamb):1,(little,Jack):0,(little,Jill):0,(lamb,jack):0,(lamb,jill):0,(jack,jill):0]

第二句也是如此。输出也可以以表格形式呈现,其中句子为一列,单词对为另一列。

【问题讨论】:

    标签: python python-3.x nlp


    【解决方案1】:

    这些对也必须是字符串:

    pairs = [('mary','little'),('mary','lamb'),('mary','jack'),('mary','jill'),('little','lamb'),('little','Jack'),('little','Jill'),('lamb','jack'),('lamb','jill'),('jack','jill')]
    
    sents = ['Mary had a little lamb','Jack and Jill went up the hill']
    

    您需要使用.lower() 函数将您选择的句子设为小写,因为您的单词匹配不区分大小写。然后,您可以使用列表推导来创建两个单词都在句子中的对列表。

    sent = sents[0].lower()
    matches = [s for s in pairs if s[0] in sent and s[1] in sent]
    
    d = {}
    
    for p in pairs:
        if p in matches:
            d[p] = 1
        else:
            d[p] = 0
    
    print(d)
    

    【讨论】:

    • 这适用于单句。但是,如果我使用 for 循环遍历所有句子,那么每次字典都会更新。有没有办法将每个句子的字典值存储为列表列表,其中每个列表将包含每个句子的字典值?
    【解决方案2】:

    如果你是单线的粉丝,你可以使用它:

    m_str = 'Mary had a little lamb'
    m_dict = {pair:count for pair,count in zip(a, [1 if (item[0] in m_str.lower().split(' ') and item[1] in m_str.lower().split(' ')) else 0 for item in a])}
    

    输出:

    {('mary', 'little'): 1, ('mary', 'lamb'): 1, ('mary', 'jack'): 0, ('mary', 'jill'): 0, ('little', 'lamb'): 1, ('little', 'Jack'): 0, ('little', 'Jill'): 0, ('lamb', 'jack'): 0, ('lamb', 'jill'): 0, ('jack', 'jill'): 0}
    

    此解决方案将只带 1 和 0,如果出现或不对应。没有完全理解对数计数器的含义(例如,让我们说 - 第一个单词两次,第二个单词只有一次 - 这算多少?),但是对需求的任何修改都会导致对代码的少量修改。

    【讨论】:

    • 是的,它会给出 1 或 0。即使第一个单词出现两次,这对中的两个单词都应该出现在句子中,只有这样它才会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 2013-12-25
    • 1970-01-01
    • 2021-02-05
    • 2018-02-24
    相关资源
    最近更新 更多