2015-06-08 2 views
2

У меня есть словарь. Я хочу опустить слова со счетом 1 из словаря. как мне это сделать? Любая помощь? и я хочу извлечь синтаксическую модель слов? как мне это сделать?как опустить менее частые слова из словаря в python?

import codecs 
file=codecs.open("Pezeshki339.txt",'r','utf8') 
txt = file.read() 
txt = txt[1:] 

token=txt.split() 

count={} 
for word in token: 
    if word not in count: 
     count[word]=1 
    else: 
     count[word]+=1 
for k,v in count.items(): 
    print(k,v) 

Я мог бы изменить свой код следующим образом. Но есть вопрос: как я могу создать матрицу bigram и сгладить ее с помощью метода add-one? Я ценю любые предложения, которые соответствуют моему коду.

import nltk 
from collections import Counter 
import codecs 
with codecs.open("Pezeshki339.txt",'r','utf8') as file: 
    for line in file: 
     token=line.split() 

spl = 80*len(token)/100 
train = token[:int(spl)] 
test = token[int(spl):] 
print(len(test)) 
print(len(train)) 
cn=Counter(train) 
known_words=([word for word,v in cn.items() if v>1])# removes the rare words and puts them in a list 
print(known_words) 
print(len(known_words)) 
bigram=nltk.bigrams(known_words) 
frequency=nltk.FreqDist(bigram) 
for f in frequency: 
    print(f,frequency[f]) 

ответ

3

использовать счетчик Dict считать слово затем отфильтровать .items удаление ключей, которые имеют значение 1:

from collections import Counter 

import codecs 
with codecs.open("Pezeshki339.txt",'r','utf8') as f: 

    cn = Counter(word for line in f for word in line.split()) 

    print(dict((word,v)for word,v in cn.items() if v > 1)) 

Если вы просто хотите использовать слова список Комп:

print([word for word,v in cn.items() if v > 1 ]) 

Вам не нужно вызывать чтение, вы можете разделить каждую строку по ходу, также если вы хотите удалить знаки препинания, вам необходимо снять:

from string import punctuation 

cn = Counter(word.strip(punctuation) for line in file for word in line.split()) 
+0

:-) Самый быстрый пистолет на западе. –

+0

@AmiTavory, иногда;) –

+0

@marysd, я посмотрю в am, мозг отключается здесь на ночь. –

3
import collections 

c = collections.Counter(['a', 'a', 'b']) # Just an example - use your words 

[w for (w, n) in c.iteritems() if n > 1] 
+0

Спасибо всем и спасибо Padraic. Твой был лучшим. Это был код, который мне нужен. – marysd

+0

Обычно Padraic - лучший. И самый быстрый. –

+0

@marysd, без проблем, пожалуйста. Ами, могу ли я это в письменной форме;) –

0

Решение Padraic отлично работает. Но вот решение, которое может просто пойти под кодом, а не переписывать его полностью:

newdictionary = {} 
for k,v in count.items(): 
    if v != 1: 
     newdictionary[k] = v