код для подсчета количества предложений, слов и символов во входном файле - PullRequest
0 голосов
/ 23 февраля 2011

Я написал следующий код для подсчета количества предложений, слов и символов во входном файле sample.txt, который содержит абзац текста.Он отлично работает, давая количество предложений и слов, но не дает точное и правильное количество символов (без пробелов и знаков препинания)

lines,blanklines,sentences,words=0,0,0,0
num_chars=0</p>

<p>print '-'*50</p>

<p>try:
    filename = 'sample.txt'
    textf = open(filename,'r')c
except IOError:
    print 'cannot open file %s for reading' % filename
    import sys
    sys.exit(0)</p>

<p>for line in textf:
    print line
    lines += 1
    if line.startswith('\n'):
        blanklines += 1
    else:</p>

<pre><code>    sentences += line.count('.')+ line.count ('!')+ line.count('?')

    tempwords = line.split(None)
    print tempwords 
    words += len(tempwords)

textf.close ()

print '-' * 50 напечатать "Lines:", строки напечатать "пустые строки:", пустые строки напечатать "предложения:", предложения напечатать "words:", слова

import nltk import nltk.dataимпортировать nltk.tokenize

с открытым ('sample.txt', 'r') как f: для строки в f: num_chars + = len (строка)

num_chars = num_chars - (слова+1)

pcount = 0 из nltk.tokenize импортировать TreebankWordTokenizer с открытым ('sample.txt', 'r') как f1: для строки в f1: #tokenised_words = nltk.tokenize.word_tokenize (line)tokenizer = TreebankWordTokenizer () tokenised_words = tokenizer.tokenize (строка) для w в tokenised_words: if ((w == '.') | (w == ';') | (w == '!') | (w == '?')): pcount = pcount + 1 печать "pcount:", pcount num_chars = num_chars - pcount печать "chars:", num_chars

pcount - это числознаки препинания.Могут ли некоторые предложить изменения, которые мне нужно сделать, чтобы узнать точное количество символов без пробелов и знаков препинания?

Ответы [ 4 ]

2 голосов
/ 23 февраля 2011
import string

#
# Per-line counting functions
#
def countLines(ln):      return 1
def countBlankLines(ln): return 0 if ln.strip() else 1
def countWords(ln):      return len(ln.split())

def charCounter(validChars):
    vc = set(validChars)
    def counter(ln):
        return sum(1 for ch in ln if ch in vc)
    return counter
countSentences = charCounter('.!?')
countLetters   = charCounter(string.letters)
countPunct     = charCounter(string.punctuation)

#
# do counting
#
class FileStats(object):
    def __init__(self, countFns, labels=None):
        super(FileStats,self).__init__()
        self.fns    = countFns
        self.labels = labels if labels else [fn.__name__ for fn in countFns]
        self.reset()

    def reset(self):
        self.counts = [0]*len(self.fns)

    def doFile(self, fname):
        try:
            with open(fname) as inf:
                for line in inf:
                    for i,fn in enumerate(self.fns):
                        self.counts[i] += fn(line)
        except IOError:
            print('Could not open file {0} for reading'.format(fname))

    def __str__(self):
        return '\n'.join('{0:20} {1:>6}'.format(label, count) for label,count in zip(self.labels, self.counts))

fs = FileStats(
    (countLines, countBlankLines, countSentences, countWords, countLetters, countPunct),
    ("Lines",    "Blank Lines",   "Sentences",    "Words",    "Letters",    "Punctuation")
)
fs.doFile('sample.txt')
print(fs)

приводит к

Lines                   101
Blank Lines              12
Sentences                48
Words                   339
Letters                1604
Punctuation             455
1 голос
/ 23 февраля 2011

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

0 голосов
/ 18 ноября 2016

Попробуйте это для подсчета количества слов и количества предложений и получите вероятность для похожих слов,

from nltk.tokenize import word_tokenize
from nltk.tokenize import sent_tokenize


text_file = open("..//..//static//output.txt", "r")
lines = text_file.readlines()
x=0
tokenized_words = [word_tokenize(i) for i in lines]
for i in tokenized_words:

    print(i) #array contain with tokens
    print(str(len(i))) #word count

    for j in i:
        if j== 'words': #simple algo for count number of 'words' to be count
            x = x+1

tokenized_sents = [sent_tokenize(k) for k in lines]

for  k in tokenized_sents:
    print("Sentences"+str(k)) #array contain with sentences
    print("number of sentences "+str(len(k))) #number of sentences

print("number of word"+str(x))
print("Probability of 'word' in text file "+str(x/len(i)))
0 голосов
/ 23 февраля 2011

Однажды вы можете сделать, когда вы читаете строку, перебираете ее и увеличиваете количество символов:

for character in line:
    if character.isalnum():
        num_chars += 1

P.S. Вы можете изменить условие условия, чтобы удовлетворить ваши конкретные потребности, например, если вы хотите считать $, например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...