8

ファイルsamp.txtからの入力段落をトークン化するために、次のコードを記述しました。誰かがファイル内の文、単語、文字の数を見つけて印刷するのを手伝ってくれますか?私はこれのためにPythonでNLTKを使用しました。

>>>import nltk.data
>>>import nltk.tokenize
>>>f=open('samp.txt')
>>>raw=f.read()
>>>tokenized_sentences=nltk.sent_tokenize(raw)
>>>for each_sentence in tokenized_sentences:
...   words=nltk.tokenize.word_tokenize(each_sentence)
...   print each_sentence   #prints tokenized sentences from samp.txt
>>>tokenized_words=nltk.word_tokenize(raw)
>>>for each_word in tokenized_words:
...   words=nltk.tokenize.word_tokenize(each_word)
...   print each_words      #prints tokenized words from samp.txt
4

8 に答える 8

11

この方法を試してください (このプログラムは、 で指定されたディレクトリ内の 1 つのテキスト ファイルで作業していることを前提としていますdirpath)。

import nltk
folder = nltk.data.find(dirpath)
corpusReader = nltk.corpus.PlaintextCorpusReader(folder, '.*\.txt')

print "The number of sentences =", len(corpusReader.sents())
print "The number of patagraphs =", len(corpusReader.paras())
print "The number of words =", len([word for sentence in corpusReader.sents() for word in sentence])
print "The number of characters =", len([char for sentence in corpusReader.sents() for word in sentence for char in word])

お役に立てれば

于 2011-02-22T06:38:55.673 に答える
3

nltk では、FreqDist も使用できます ( O'Reillys Book Ch3.1を参照) 。

そしてあなたの場合:

import nltk
raw = open('samp.txt').read()
raw = nltk.Text(nltk.word_tokenize(raw.decode('utf-8')))
fdist = nltk.FreqDist(raw)
print fdist.N()
于 2014-12-20T14:43:34.143 に答える
0
  • 文字は数えやすいです。
  • 段落は通常、数えるのも簡単です。2つの連続した改行が表示されるときはいつでも、おそらく段落があります。列挙型または順序付けされていないリストは、エントリをそれぞれ2つの改行で区切ることができますが、段落であると言うかもしれません。見出しやタイトルの後には、明らかに段落ではありませんが、2つの改行を続けることができます。また、ファイル内の単一の段落の場合を考えてみてください。その後に改行が1つあるかまったくありません。
  • 文はトリッキーです。一定期間、感嘆符または疑問符の後に空白またはファイルの終わりが続く場合があります。コロンが文の終わりを示す場合とそうでない場合があるため、注意が必要です。通常、英語の場合、次の空白以外の文字は大文字になります。しかし、そうでない場合もあります。たとえば、それが数字の場合。また、開き括弧が文の終わりを示す場合もあります(ただし、この場合のように、それは議論の余地があります)。
  • 言葉もトリッキーです。通常、単語は空白または句読点で区切られます。ダッシュで単語を区切る場合とそうでない場合があります。これは、たとえばハイフンの場合です。

単語や文章については、おそらく文章の定義とそのための単語とプログラムを明確に述べる必要があります。

于 2011-02-22T06:06:21.730 に答える
0

100%正しいわけではありませんが、試してみました。@wilhelmtell によるすべてのポイントを考慮に入れているわけではありません。時間があるときに試してみます...

if __name__ == "__main__":
   f = open("1.txt")
   c=w=0
   s=1
   prevIsSentence = False
   for x in f:
      x = x.strip()
      if x != "":
        words = x.split()
        w = w+len(words)
        c = c + sum([len(word) for word in words])
        prevIsSentence = True
      else:
        if prevIsSentence:
           s = s+1
        prevIsSentence = False

   if not prevIsSentence:
      s = s-1
   print "%d:%d:%d" % (c,w,s)

ここで 1.txt はファイル名です。

于 2011-02-22T06:24:52.967 に答える
-4

単語や文字を数えるプログラムはすでにあります -- wc.

于 2011-02-22T06:01:38.987 に答える