при первой публикации в стеке - всегда находил предыдущие вопросы, способные решить мою проблему! Основная проблема, которую я имею, - это логика ... даже ответ с псевдокодом был бы великолепен.
Я использую python для чтения данных из каждой строки текстового файла в формате:
This is a tweet captured from the twitter api #hashtag http://url.com/site
Используя nltk, я могу токенизировать по строке, а затем использовать reader.sents () для перебора и т. Д .:
reader = TaggedCorpusReader(filecorpus, r'.*\.txt', sent_tokenizer=Line_Tokenizer())
reader.sents()[:10]
Но я бы хотел посчитать частоту определенных «горячих слов» (хранящихся в массиве или подобном) в каждой строке, а затем записать их обратно в текстовый файл. Если бы я использовал reader.words (), я мог бы подсчитать частоту «горячих слов» во всем тексте, но я ищу количество в строке (или «предложение» в данном случае).
В идеале, что-то вроде:
hotwords = (['tweet'], ['twitter'])
for each line
tokenize into words.
for each word in line
if word is equal to hotword[1], hotword1 count ++
if word is equal to hotword[2], hotword2 count ++
at end of line, for each hotword[index]
filewrite count,
Кроме того, не стоит беспокоиться о том, что URL может быть поврежден (использование WordPunctTokenizer удалит пунктуацию - это не проблема)
Было бы здорово использовать любые полезные указатели (включая псевдо или ссылки на другой подобный код).
---- РЕДАКТИРОВАТЬ ------------------
Закончилось делать что-то вроде этого:
import nltk
from nltk.corpus.reader import TaggedCorpusReader
from nltk.tokenize import LineTokenizer
#from nltk.tokenize import WordPunctTokenizer
from collections import defaultdict
# Create reader and generate corpus from all txt files in dir.
filecorpus = 'Twitter/FINAL_RESULTS/tweetcorpus'
filereader = TaggedCorpusReader(filecorpus, r'.*\.csv', sent_tokenizer=LineTokenizer())
print "Reader accessible."
print filereader.fileids()
#define hotwords
hotwords = ('cool','foo','bar')
tweetdict = []
for line in filereader.sents():
wordcounts = defaultdict(int)
for word in line:
if word in hotwords:
wordcounts[word] += 1
tweetdict.append(wordcounts)
Вывод:
print tweetdict
[defaultdict(<type 'dict'>, {}),
defaultdict(<type 'int'>, {'foo': 2, 'bar': 1, 'cool': 2}),
defaultdict(<type 'int'>, {'cool': 1})]