2017-06-04 21 views
1

私は学校に答えなければならない質問を返す最初の単語を文で返しますか?

この質問の目的のために、その単語の直後にピリオドが続くと、その単語を文の終わりと定義します。たとえば、「これは文章です。最後の文は4つの単語を持っていました。 "、最後の単語は「文章」と「単語」です。同様の方法で、文の開始語を、文の終わりの前にある任意の語として定義します。前の例のテキストの開始語は「The」です。テキストの最初の単語を開始単語とみなす必要はありません。

単一の文字列引数をとるendwords関数です。この関数は、指定された文字列に現れるすべての文末の単語のリストを返す必要があります。返されるリストには重複した項目はなく、最後の単語にはピリオドを含めないでください。

私が持っているコードは、これまでのところです:

def startwords(astring): 
    mylist = astring.split() 
    if mylist.endswith('.') == True: 
     return my list 

が、私は右のアプローチを使用している場合、私は知りません。助けが必要です

答えて

2

コードにいくつかの問題があります。以下は簡単なアプローチです。バイグラムのリストを作成し、最初のトークンは、ピリオドで終わる各バイグラムの第二のトークンを選択:

def startwords(astring): 
    mylist = astring.split() # a list! Has no 'endswith' method 
    bigrams = zip(mylist, mylist[1:]) 
    return [b[1] for b in bigrams if b[0].endswith('.')] 

ziplist comprehenionは上に読む価値が二つのものです。働くことができない

1
mylist = astring.split() 
if mylist.endswith('.') 

mylistということで理由の一つはlistあり、そして方法としてendswithを持っていません。

別の答えはそう、私は正規表現のソリューションを提案してみましょうあなたのアプローチを固定:

import re 

print(re.findall(r"\.\s*(\w+)","This is a sentence. The last sentence had four words.")) 

一致するすべての単語はドットとオプションのスペース

結果、以下:['The']

+0

A' [0] '最後に、それがより便利になるだろう。 'print(re.findall(r" \。\ s *(\ w +) "、input)[0])' –

+0

@IvánC。はい、私の答えは文を始めるすべての単語を見つけます(他の正しい答えは同じです) –

0
def endwords(astring): 
    mylist = astring.split('.') 
    temp_words = [x.rpartition(" ")[-1] for x in mylist if len(x) > 1] 
    return list(set(temp_words)) 
0

これは、それを行う1つの方法 - >

#!/bin/env/ python 

from sets import Set 

sentence = 'This is a sentence. The last sentence had four words.' 
uniq_end_words = Set() 

for word in sentence.split(): 
    if '.' in word: 
     # check if period (.) is at the end 
     if '.' == word[len(word) -1]: 
      uniq_end_words.add(word.rstrip('.')) 

print list(uniq_end_words) 

出力(与えられた文のすべてのエンド単語のリスト) - >

['words', 'sentence'] 

あなたの入力文字列は、(最後の単語を言うことができます)このような何かをその単語の一つで期間を持っている場合 - >
'私はnumpy.random.randの文書が好きです。'

出力は以下のようになります - ['numpy.random.rand']

そして、入力された文字列「私はnumpy.random.randたくさんの文書が好きなため。「

出力は以下のようになります - ['lot']

0

これは、重複しないように設定を作成します。次に、文のリスト( "。"で区切られた)のリストのforループに進み、各文に対して、それを単語で分割し、[:-1]を使用して最後の単語のリストのみを作成し、[0]リスト。

print (set([ x.split()[:-1][0] for x in s.split(".") if len(x.split())>0])) 

理論的にはifは必要ではありませんが、私はそれがなければ動作させることができませんでした。

これは同様に動作します。それは、自身の( ` 'The'`)で文字列を返すよう

print (set([ x.split() [len(x.split())-1] for x in s.split(".") if len(x.split())>0])) 
関連する問題