2017-03-06 6 views
-4

テキストファイルの各文に含まれる単語の数と平均の長さを出力するには、Pythonを使用する必要があります。この割り当てにNLTKまたはRegexを使用することはできません。文中の単語を数えて平均化する

ファイル内の文は、ピリオド、感嘆符、または疑問符で終わります。ハイフン、ダッシュ、またはアポストロフィは文を終了しません。引用符は文を終わらせません。しかし、ある期間は文章を終わらせない。例えば、Mrs.、Mr.、Dr.、Fr.、Jr.、St.は、すべて一般的な略語である。例えば

入力テキストがある場合、:

"My name? Bob. Your name? Lily! Hi there" 

...出力は次のようになります。

[(no. of words, mean length of words in sentence1), 
(no. of words, mean length of words in sentence2), 
...] 

コード:

p= ("Mrs.","Mr.","St.") 
def punct_after_ab(texts): 
    new_text = texts 
    for abb in p: 
     new_text = new_text.replace(abb,abb[:-1]) 
    return print(new_text) 

import numpy 
def word_list(text): 
    special_characters = ["'",","] 
    clean_text = text 
    for string in special_characters: 
     clean_text = clean_text.replace(string, "") 
    count_list = [len(i) for i in clean_text.split()] 
    count = [numpy.mean(count_list)] 
    return print((count_list),(count)) 

しかし、私はこれをテストしたとき文を分割しません。

+1

SOは無料のコーディングサービスではないため、この質問を議論の対象外としています。 – TigerhawkT3

+1

あなたのためにいくつかのコードを書きたいと思うようです。多くのユーザーは、苦労しているコーダーのコードを作成したいと考えていますが、通常、ポスターが既に問題を解決しようとしているときにのみ役立ちます。この努力を実証する良い方法は、これまでに書いたコード、サンプル入力(もしあれば)、期待される出力、実際に得られる出力(出力、トレースバックなど)を含めることです。あなたが提供する詳細があれば、受け取る可能性のある回答が増えます。 [FAQ](http://stackoverflow.com/tour)と[How to Ask](http://stackoverflow.com/questions/how-to-ask)を確認してください。 – TigerhawkT3

+0

私のコードを追加しましたが、何らかのガイダンスを探しています... – Bala

答えて

0

.split(' ')の行に沿って何かを使用して、単語をスペースで区切ってから、配列演算と基本的な数学/統計を使って答えを得てください。より具体的に質問を更新し、独自のコードをいくつか含めると、私はそれに応じて私の答えを修正する意思があります。

このサイトでは、あなたが求めている質問に多大な努力を払わなければ、非常に役に立つ回答を得ることはできません。いくつかの研究を行い、質問をする前にできるだけ多くのコードを書くようにしてください。これは、人々があなたを助けることをはるかに容易にし、より意欲的になります。現時点では、あなたのために宿題をする人を手に入れようとしているようです。

更新:

あなたのコードは、ほとんどの部分のために働く、あなたが変更する必要があるだけでいくつかのものがあります。私はあなたが持っているものと一緒に遊んだので、テキストを文章の配列に分解して、そこから統計を引き続き実行することができました。

INPUT.TXT:

My name? Mr. Bob. Your name? Mrs. Lily! 
What's up? 

test.py(私はのpython 3.6を使用):

Enter file name: input.txt 
My name? 
Mr Bob. 
Your name? 
Mrs Lily! 
Whats up? 

Process finished with exit code 0 

def punct_after_ab(texts): 
     p = ("Mrs.", "Mr.", "St.") 
     new_text = texts 
     for abb in p: 
      new_text = new_text.replace(abb,abb[:-1]) 
     return new_text 


    def clean_text(text): 
     special_characters = ["'", ","] 
     clean_text = text 
     for string in special_characters: 
      clean_text = clean_text.replace(string, "") 
     return clean_text 


    def split_sentence(text): 
    #Initialize vars 
    sentences = [] 
    start = 0 
    i = 0 

    # Loop through the text until you find punctuation, 
    # then add the sentence to the final array 
    for char in text: 
     if char == '.': 
      sentences.append(text[start:i+1]) 
      start = i + 2 
     if char == '?': 
      sentences.append(text[start:i+1]) 
      start = i + 2 
     if char == '!': 
      sentences.append(text[start:i+1]) 
      start = i + 2 
     i += 1 

    # Print the sentences to console 
    for sentence in sentences: 
     print(sentence) 


def main(): 
    # Ask user for file name 
    file = input("Enter file name: ") 
    # Open the file and strip newline chars 
    fd = open(file).read() 
    fd = fd.strip("\n") 

    # Remove punctuation that doesn't delineate sentences 
    text = punct_after_ab(fd) 
    text = clean_text(text) 

    # Separate sentences 
    split_sentence(text) 

# Run program 
if __name__ == '__main__': 
    main() 

私は出力に以下のテキストを、これを取得することができました

そこからあなたの文章の統計を簡単に行うことができます。私はちょうどあなたがそれを通過し、少しきれいにしたいと思うので、これを打ち込んだ。私はこれが役立つことを願っています

+0

質問が具体的ではないため、ユーザーにはもっと大きな問題に答えていると思います合法的な答えのために。 – SuperAdmin

関連する問題