从元素列表中提取文本计数

时间:2018-01-20 15:43:32

标签: python list countvectorizer

我有一个包含文本元素的列表。

text = ['a for=apple','b for=ball', 'd for=dog', 'e for=elephant', 'a for=apple', 'd for=dog', '1.=one', '2.=two'] 

我需要获得在" ="之前出现的文本计数。我使用了如下的CountVectorizer和一个令牌模式,但它没有给出预期的结果

print(text)
vectorizer = CountVectorizer()
vectorizer = CountVectorizer(token_pattern="^[^=]+")
vectorizer.fit(text)
print(vectorizer.vocabulary_)

其中输出如下

{'a for': 2, 'b for': 3, 'd for': 4, 'e for': 5, '1.': 0, '2.': 1}

但是预期的输出应该是

{'a for': 2, 'b for': 1, 'd for': 2, 'e for': 1, '1.': 1, '2.': 1}

此外,我需要删除"。"来自" 1。"这样我的输出就是

 {'a for': 2, 'b for': 1, 'd for': 2, 'e for': 1, '1': 1, '2': 1}

我有什么方法可以做到吗?

4 个答案:

答案 0 :(得分:0)

import re
dictionary = {}

def remove_special_characters(value):
    if '.' in value:
        return re.sub(r'\.=\w+','',value)
    return value.split('=')[0]
for value in text:
    new_value = remove_special_characters(value)
    if new_value in dictionary:
        dictionary[new_value] += 1
    else:
        dictionary[new_value] = 1
print(dictionary)
>>>{'a for': 2, 'b for': 1, 'd for': 2, 'e for': 1, '1': 1, '2': 1}

答案 1 :(得分:0)

from collections import Counter

text = ['a for=apple','b for=ball', 'd for=dog', 'e for=elephant', 'a for=apple', 'd for=dog', '1.=one', '2.=two']

text = [i.split('=')[0] for i in text]      #consider only the first part of the split
text = [i.split('.')[0] for i in text]
frequency = {}
for each in text:
    if each in frequency:
        frequency[each] += 1
    else:
        frequency[each] = 1
print(frequency)                        #if you want to use dict

counts =list(Counter(text).items())     #if you want to use collections module
print(counts)

请注意,这仅适用于您的text列表所说的内容,即只包含一个=,除此之外,您需要稍微调整一下。

答案 2 :(得分:0)

您可以在没有CountVectorizer的情况下执行此操作:

{'d for': 2, 'b for': 1, '1': 1, 'a for': 2, '2': 1, 'e for': 1}

产生:

pdf_footer

答案 3 :(得分:0)

一种简单的方法是使用collections.Counter()

>>> from collections import Counter
>>> text = ['a for=apple','b for=ball', 'd for=dog', 'e for=elephant', 'a for=apple', 'd for=dog', '1.=one', '2.=two']
>>> Counter(x.split('=')[0].replace('.', '') for x in text)
Counter({'a for': 2, 'd for': 2, 'b for': 1, 'e for': 1, '1': 1, '2': 1})

哪些第一次将"="中的每个字符串拆分成一个列表,并从中获取第一个元素。然后调用replace()"."的所有实例替换为""。最后,它返回计数的Counter()对象。

注意:如果要在结尾处返回纯字典,可以将dict()包装到最后一行。