【发布时间】:2014-01-16 01:02:56
【问题描述】:
我有一个文本语料库:来自一个包含各种句子和段落的文件
这是我的代码:
import re
import nltk
from nltk.tokenize import RegexpTokenizer
import math
from collections import Counter
with open("descriptionsample.tsv", "r") as openfile:
frequency = Counter()
stopwords = nltk.corpus.stopwords.words('english')
tokenizer = RegexpTokenizer("[\w’]+", flags=re.UNICODE)
for line in openfile:
words = line.lower().strip()
words=re.sub(r'[0-9]|\~|\`|\@|\#|\$|\%|\^|\&|\*|\(|\)|\_|\+|\=|\{|\[|\}|\]|\\|\<|\,|\<|\.|\>|\?|\/|\;|\:', '',words).replace('-',' ')
tokens = tokenizer.tokenize(words)
tokens = [token for token in tokens if token not in stopwords]
frequency.update(tokens)
我的结果是计数器格式
{'code':32344,'sql':2123,'chicago':1233...........} etc.
但是假设按文档的第一行执行词频的结果是:
{'code':10,'sql':3,'python':2........}
我要做的是按文档从元组中创建一个共现矩阵(与二元组/三元组等相反),然后在最后收集总和。本质上是将每个键的计数附加到由 Key1,Key2:Key2 的值组成的新创建的元组中。其中 key2 甚至可以是 key1。
所以在计算 tsv 文件每一行的词频后,我希望逐行结果看起来像这样:
{('code','code'):10,('code','sql)':3,('code','python'):2,('sql,'code'):10,('sql','sql'):3,('sql','python'):2,('python','code'):10,('python','sql'):3,('python','python'):2}
我想不通。有什么帮助吗?也许我正在俯瞰其他一些可以自行完成的图书馆。
【问题讨论】:
标签: python collections key append frequency