查找文本文件中最长的单词

时间:2013-05-03 18:57:45

标签: python

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

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

每封信只能使用一次。因此,从'qugteroda',我应该得到rag outou,愤怒,out out,out read,outout,readout。我正在使用python 2.2

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

6 个答案:

答案 0 :(得分:2)

我会做这样的事情:

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}

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

然后,你找到最长的单词。

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

答案 1 :(得分:1)

使用itertools获取排列:

list(itertools.permutations("qugteroda")

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

您可以在广告系列中查看Trie的快速查询。

答案 2 :(得分:0)

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

qugteroda ->  adegoqrtu
the_letters = 'adegoqrtu'

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

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

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

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

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

答案 3 :(得分:0)

我会做这样的事情:

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'))

答案 4 :(得分:0)

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)

答案 5 :(得分:-2)

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

'''写一个函数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)