用python解析一个巨大的字典文件。简单的任务我没法动脑

2024-09-27 00:20:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚得到了一个用于其他编程用途的1.4m行字典,我很遗憾地看到notepad++没有足够的功能来解析这个问题。词典包含三种类型的行:

<ar><k>-aaltoiseen</k>
yks.ill..ks. <kref>-aaltoinen</kref></ar>
yks.nom. -aaltoinen; yks.gen. -aaltoisen; yks.part. -aaltoista; yks.ill. -aaltoiseen; mon.gen. -aaltoisten -aaltoisien; mon.part. -aaltoisia; mon.ill. -aaltoisiinesim. Lyhyt-, pitkäaaltoinen.</ar>

我想把每一个单词都提取到一个没有重复的单词列表中。让我们从我的代码开始。你知道吗

f = open('dic.txt')
p = open('parsed_dic.txt', 'r+')
lines = f.readlines()
for line in lines:
    #<ar><k> lines
    #<kref> lines
    #ending to ";" - lines
    for word in listofwordsfromaline:
        p.write(word,"\n")
f.close()
p.close()

我不是特别问你怎么做这整件事,但任何事都会有帮助。链接到一个教程或一种类型的行解析方法将不胜感激。你知道吗


Tags: txt类型open单词genarlinespart
2条回答

首先找出一个词的定义。 创建一个正则表达式来捕获这些匹配项。例如-word break'\b'将匹配单词边界(非单词字符)。 https://docs.python.org/2/howto/regex.html

如果每种类型行中的单词定义不同-那么如果语句先匹配行,然后对应的正则表达式再匹配单词,依此类推。你知道吗

Match groups in Python

对于前两种情况,您可以看到任何单词都以特定的标记开头和结尾,如果我们仔细观察,则可以说每个单词前面都必须有一个“>;-”字符串和一个

# First and second cases
start = line.find(">-")+2
end = line.find("</")+1
required_word = line[start:end]

在最后一种情况下,您可以使用split方法:

    word_lst = line.split(";")
    ans = []
    for word in word_list:
      start = word.find("-")
      ans.append(word[start:])
    ans = set(ans)

相关问题 更多 >

    热门问题