【问题标题】:Return first word in sentence? [duplicate]返回句子中的第一个单词? [复制]
【发布时间】:2017-06-04 19:56:21
【问题描述】:

这是我必须为学校回答的问题

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

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

我目前的代码是:

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

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

【问题讨论】:

    标签: python string


    【解决方案1】:

    您的代码存在几个问题。以下将是一个简单的方法。创建一个二元组列表并选择每个二元组的第二个标记,其中第一个标记以句点结尾:

    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 是值得一读的两件事。

    【讨论】:

      【解决方案2】:
      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']

      【讨论】:

      • 最后的 [0] 会使其更有用,因为它会返回自己的字符串 ('The')。 print(re.findall(r"\.\s*(\w+)", input)[0])
      • @IvánC。是的,我的答案找到了句子开头的所有单词(另一个正确答案也是如此)
      【解决方案3】:
      def endwords(astring):
          mylist = astring.split('.')
          temp_words = [x.rpartition(" ")[-1] for x in mylist if len(x) > 1]
          return list(set(temp_words))
      

      【讨论】:

        【解决方案4】:

        这将创建一个集合,因此没有重复项。然后在句子列表中进行 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]))
        

        【讨论】:

          【解决方案5】:

          这是一种方法->

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-30
            • 2015-10-09
            • 2017-03-30
            • 2023-03-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多