2017-06-04 107 views
1

繼承人我必須爲學校回答的問題返回句首字?

對於這個問題,我們將定義一個單詞作爲結束句子,如果該單詞緊接着是句號。例如,在文字「這是一個句子。最後一句有四個詞。「,結尾詞是'句子'和'詞'。以類似的方式,我們將把句子的開始詞定義爲在句子結尾之前的任何詞。從前面的示例文本開始的單詞將是「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的方法。

另一個答案固定你的方法,所以讓我提出一個正則表達式的解決方案:['The']

+0

一個'[0]'在年底會使其更加有用,因爲它返回自己的字符串(''The'')。 '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

這就是:

import re 

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

比賽之後的點和可選的空間

結果所有單詞一種方法 - >

#!/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])) 

的,如果在理論上是不需要的,但我不能讓沒有它的工作。

這工作,以及:

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