在句子中返回第一个单词?

时间:2017-06-04 19:56:22

标签: python string

这是我必须回答的问题

出于这个问题的目的,我们将一个单词定义为句子,如果该单词后面紧跟一个句点。例如,在文本“这是一个句子。最后一句话有四个单词。“,结尾的单词是'句子'和'单词'。以类似的方式,我们将句子的起始单词定义为句子结尾之前的任何单词。前一个示例文本中的起始单词将为“The”。您不需要将文本的第一个单词视为起始单词。编写一个程序:

一个带有单个字符串参数的endwords函数。此函数必须返回出现在给定字符串中的所有句子结束字的列表。返回的列表中不应有重复的条目,并且句点不应包含在结尾的单词中。

我到目前为止的代码是:

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

但我不知道我是否使用了正确的方法。我需要一些帮助

5 个答案:

答案 0 :(得分:3)

您的代码有几个问题。以下是一种简单的方法。创建一个双字母组列表,并选择每个二元组的第二个标记,其中第一个标记以句点结束:

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 :(得分:1)

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

无效,其中一个原因是mylistlist,并且没有endswith作为方法。

另一个答案修复了你的方法,所以让我提出一个正则表达式解决方案:

import re

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

匹配点后面的所有单词和可选空格

结果:['The']

答案 2 :(得分: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))

答案 3 :(得分:0)

这是一种方法 - >

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

答案 4 :(得分:0)

这会创建一个集合,因此没有重复项。然后在句子列表中进行for循环(用“。”分隔),然后对于每个句子,将其分成单词,然后使用[:-1]只生成最后一个单词的列表并获取[0]项目列表。

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

理论上不需要if,但没有它我就无法工作。

这也有效:

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