Частота слов в тексте с использованием Python, но игнорирует стоп-слова - PullRequest
4 голосов
/ 04 июля 2010

Это дает мне частоту слов в тексте:

 fullWords = re.findall(r'\w+', allText)

 d = defaultdict(int)

 for word in fullWords :
          d[word] += 1

 finalFreq = sorted(d.iteritems(), key = operator.itemgetter(1), reverse=True)

 self.response.out.write(finalFreq)

Это также дает мне бесполезные слова, такие как "the", an "" a "

Мой вопрос:Есть ли в Python библиотека стоп-слов, которая может удалить все эти распространенные слова?Я хочу запустить это на Google App Engine

Ответы [ 4 ]

5 голосов
/ 04 июля 2010

Вы можете загрузить списки стоп-слов в виде файлов в различных форматах, например, из здесь - все, что нужно Python, - это прочитать файл (и это в формате csv, легко читаемое сcsv module), создайте набор и используйте членство в этом наборе (возможно, с некоторой нормализацией, например, в нижнем регистре), чтобы исключить слова из числа.

3 голосов
/ 04 июля 2010

Существует простой способ справиться с этим, немного изменив код (отредактированный в соответствии с комментариями Джона):

stopWords = set(['a', 'an', 'the', ...])
fullWords = re.findall(r'\w+', allText)
d = defaultdict(int)
for word in fullWords:
    if word not in stopWords:
        d[word] += 1
finalFreq = sorted(d.iteritems(), key=lambda t: t[1], reverse=True)
self.response.out.write(finalFreq)

Этот подход создает отсортированный список в два этапа: сначала он отфильтровывает любые слова в вашем желаемом списке «стоп-слов» (который был преобразован в set для эффективности), затем сортирует остальные записи.

2 голосов
/ 04 июля 2010

Я знаю, что у NLTK есть пакет с корпусом и стоп-словами для многих языков, включая английский, см. здесь для получения дополнительной информации. NLTK также имеет счетчик частоты слов, это хороший модуль для обработки естественного языка, который вы должны использовать.

0 голосов
/ 04 июля 2010
stopwords = set(['an', 'a', 'the']) # etc...
finalFreq = sorted((k,v) for k,v in d.iteritems() if k not in stopwords,
                      key = operator.itemgetter(1), reverse=True)

Это отфильтрует все ключи, которые находятся в наборе stopwords.

...