Наиболее распространенные предложения извлечения с подсчетом с использованием Python - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу написать скрипт Python, который ищет все строки Excel и возвращает 10 самых распространенных предложений. Я написал основы ngrams для текстового файла.

Файл содержит текст в формате csv, dj лучше всего 4 раза, а gd - 3 раза.

import nltk
import pandas as pd

file = open('dj.txt', encoding="utf8")
text= file.read()
length = [3]
ngrams_count = {}
for n in length:
    ngrams = tuple(nltk.ngrams(text.split(' '), n=n))
    ngrams_count.update({' '.join(i) : ngrams.count(i) for i in ngrams})
ngrams_count
df = pd.DataFrame(list(zip(ngrams_count, ngrams_count.values())), 
                  columns=['Ngramm', 'Count']).sort_values(['Count'], 
                                                           ascending=False)
df

Выход -

   Ngramm  Count
1                      is best,dj is      4
3                      is cool,gd is      2
21                     is best,gd is      2
25                best,dj is Best,dj      1
19                    not cool,dj is      1
20                cool,dj is best,gd      1
22                best,gd is cool,dj      1
23                     is cool,dj is      1
24                cool,dj is best,dj      1
0                      dj is best,dj      1
18                    is not cool,dj      1
27                Best,dj is best,dj      1
28                best,dj is best,dj      1
29                best,dj is best,gd      1
30                best,gd is cool,gd      1
31                cool,gd is COOL,gd      1
32                     is COOL,gd is      1
26                     is Best,dj is      1
17                    good,dj is not      1
16                    not good,dj is      1
15                    is not good,dj      1
14                  better,dj is not      1
13                   is better,dj is      1
12         good,sandeep is better,dj      1
11                is good,sandeep is      1
10    excellent,prem is good,sandeep      1
9               is excellent,prem is      1
8   superb,sandeep is excellent,prem      1
7               is superb,sandeep is      1
6        best,prem is superb,sandeep      1
5                    is best,prem is      1
4               cool,gd is best,prem      1
2                 best,dj is cool,gd      1
33                   COOL,gd is cool      1

Итак, во-первых, он показывает 2 для Б-га это круто, я не могу понять, почему? .. а затем я хочу отсортировать этот вывод так, чтобы он показал что-то вроде этого

Ngramm  Count
dj is cool   4
gd is cool   3
....and so on....

А потом я хочу, чтобы это делалось для файла Excel строка за строкой.

Я действительно новичок в этом, кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Поскольку это CSV-файл, сделайте себе одолжение и сначала проанализируйте CSV-файл! Затем возьмите содержимое и обработайте его так, как вы хотите. Но ваши данные, кажется, содержат одно «предложение» на ячейку, поэтому, если наша цель - найти наиболее распространенное предложение, почему вы бросаете токенизацию и нграм в этой задаче?

import csv
from collections import Counter
with open('dj.txt', encoding="utf8") as handle:
    sentcounts = Counter(cell for row in csv.reader(handle) for cell in row)

print("Frequency  Sentence")
for sent, freq in sentcounts.most_common(5):
    print("%9d"%freq, sent)

Если вам нужны токены, вы можете просто использовать split() в этом простом случае, но для более реалистичного текста используйте nltk.word_tokenize(), который знает все о пунктуации.

0 голосов
/ 19 ноября 2018

Как видите, text.split(' ') не не разделяется на знаки препинания, как запятые.
Быстрое и грязное исправление для этих конкретных данных (где единственная пунктуация, которая появляется, кажется, запятыми, и ни одна из них не отслеживается пробелами) могла бы писать.

text.replace(',',' ').split(' ')
>>> "a b,c".split(' ')
['a', 'b,c']                                 # <--- 2 elements
>>> "a b,c".replace(',',' ').split(' ')
['a', 'b', 'c']                              # <--- 3 elements

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

>>> import re
>>> re.split("[ ,]+","a b,c")
['a', 'b', 'c']
...