【问题标题】:Finding the longest words in a text file查找文本文件中最长的单词
【发布时间】:2013-04-28 06:20:24
【问题描述】:

我创建了一个函数来查找文本文件中的最长单词,并在可以由 9 个字母组成的文本文件中查找最长的单词。我是 python 新手,我正在创建一个类似于倒计时的游戏。

我创建了一个函数来查找文本文件中最长的单词。我现在想要的是创建 python 代码来查找可以由 9 个字母组成的最长单词。

每个字母只能使用一次。因此,从“qugteroda”开始,我应该感到愤怒,愤怒,敢于,阅读,愤怒,阅读。我正在使用 python 2.2

    def Words():
           qfile=open('dict.txt','r')
           longg=''
           for line in qfile:
           if len(line)>len(longg):
             longg=line
           return longg

【问题讨论】:

  • 你为什么使用 Python 2.2?你确定是 2.2 吗?
  • 你可以写一个排列算法,但是,Python 没有关于哪些排列是一个有效的英文单词的概念。
  • @adchilds。这就是我使用字典文件 dict.txt 的原因
  • 你有字典或有效的英语单词列表来比较吗?
  • @MalC,所以最长可能单词和前一个最长单词中的最长单词都在同一个文件(dict.txt)中?

标签: python


【解决方案1】:
with open('text.txt') as file:
    data=file.read().split()
    max=len(max(data,key=len ))
    print(max)
    res=[word for word in data if len(word)==max]
    print(res)

【讨论】:

  • 请解释您的代码。这如何解决 OP 的问题?
【解决方案2】:

我会这样做:

def longest_word(filename):
with open(filename, 'r') as infile:
          words = infile.read().split()
print(words)    #  return list ['What', 'is', 'Python', 'language?', 'Python', ……..]
max_len = len(max(words, key=len))
return [word for word in words if len(word) == max_len]
print(longest_word('test.txt'))

【讨论】:

    【解决方案3】:

    我知道这个问题已经有一年了,但是,试试这个:

    '''写一个函数find_longest_word(),它接受一个单词列表和 返回最长的长度。'''

    a = ['mamao', 'abacate', 'pera', 'goiaba', 'uva', 'abacaxi', 'laranja', 'maca']
    
    
    def find_longest_word(a):
    
        d = []
        for c in a:
            d.append(len(c))
            e = max(d)  #Try "min" :D
        for b in a:
            if len(b) == e:
                print "Length is %i for %s" %(len(b), b)
    

    【讨论】:

      【解决方案4】:

      1/ 从字母创建一个排序的字符串:

      qugteroda ->  adegoqrtu
      the_letters = 'adegoqrtu'
      

      2/ 从你的word文件中的所有单词创建一个列表,列表的开头应该是最大长度的单词,最后是更小的单词,这样可以加快你对N个最大单词的搜索。

      例如。 international, ragouted,facebook,outraged, outdare, outread, outrage,readout

      这个单词列表不会包含单词,而是包含单词的排序表示。将此 search_dict 存储在缓存或文件中以供进一步使用。

      例如。 search_dict = ['aaeiilnnnortt' , 'adegortu' ,'abcefkoo','adegortu']

      3/ 要找到 N 个最大的单词,只需遍历 search_dict,并不断添加作为 the_letters 字符串中字符子集的单词。 一旦找到 N 个单词,您就可以退出循环。

      【讨论】:

      • 这有点聪明,但不幸的是,即使进行了排序,也不能保证字典中的单词是the_letters 的子字符串。考虑字典包含单个字符串ac 并且字母是abc 的情况。 ac 是有效的,但是这个算法会拒绝它。
      • @KyleStrand 感谢您发现这个大错误,添加了一个更正,它应该是 the_letters 字符的子集,而不是子字符串。其余方法保持不变。
      【解决方案5】:

      我会这样做:

      from collections import Counter
      
      def find_words(valid_letters):
          valid_letters = Counter(valid_letters)
      
          with open('dict.txt', 'r') as handle:
              for word in handle:
                  letters = Counter(word.strip())
      
                  if valid_letters >= letters:
                      yield word
      
      longest_word = max(find_words('qugteroda'), key=len)
      

      它的要点是计算单词中的字母。像这样的:

      >>> count_letters('test')
      {'t': 2, 'e': 1, 's': 1}
      

      然后检查这些字母中的每一个是否都在您的有效字母字典中(确保计数也等于或小于允许的计数)。

      然后,您只需找到最长的单词。

      要找到最长的单词组合,请创建一个递归函数来构建符合字母约束的单词链。

      【讨论】:

      • 这个答案聪明、完整、正确,并且可能比目前给出的其他解决方案更快。 +1。
      【解决方案6】:

      使用 itertools 获取排列:

      list(itertools.permutations("qugteroda")
      

      对于列表中的每个元素,检查字典文件中是否存在该单词。

      您可以查看Trie 以在字典中快速查找。

      【讨论】:

      • 这可能非常慢,因为排列是O(n!)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2018-09-28
      • 2022-01-03
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      相关资源
      最近更新 更多