来自fi的计数字/位置

2024-04-25 23:39:54 发布

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

我几乎解决了python讲座中的一个练习。我被要求编写一个程序,计算每个单词在文件中出现的频率,以及它被标记为哪个位置的频率。 计数应该写入一个新文件,这个文件也在命令行中给出。你知道吗

例如

python3 wordcount-pos.py wsj00-pos.txt counts-wsj00-pos.txt

应该产生如下输出:

   Mortimer 1   NNP 1

   foul 1   JJ  1

   ...

   reported 16  VBN 7   VBD 9

   ...

   before   26  RB  6   IN  20

   ...

   allow    4   VB  2   VBP 2

我的代码生成如下输出:

   Mortimer 1   {NNP:   1}

   foul 1   {JJ: 1}

   ...

   reported 2   {VBN:   7   VBD:    9}

   ...

   before   2   {RB:    6   IN: 20}

   ...

   allow    2   {VB:    2   VBP:    2}

它不打印“单词”在我字典里的出现次数

这是我的密码:

import sys
from collections import defaultdict


def main():
    if len(sys.argv) != 3:
        print('Usage: python poscount.py <input file>', file=sys.stderr)
        sys.exit(1)

    input_filename = sys.argv[1]
    output_filename = sys.argv[2]
    # your code
    freq = defaultdict(list)
    with open(input_filename) as f:
        for line in f:
            # skip empty lines
            if line.strip() != '':
                #  split a word/pos pair into two separate strings
                word, pos = line.strip().rsplit("/", 1)
                # add word and list of pos as k, v into "freq" dictionary
                freq[word].append(pos)

    for k, v in freq.items():
        D = defaultdict(list)
        for i, item in enumerate(v):
            D[item].append(i)
        D = {k: len(v) for k, v in D.items()}
        # Output file
        with open(output_filename, "a") as f:
            print(k + "\t" + str(len(D.items())) + "\t" + str(D), file=f)


if __name__ == '__main__':
    main()

从中提取数据的文件:https://paste.elnota.space/nezemivaku.sql

文件的部分内容:

皮埃尔/NNP

维肯/NNP

,/

61/光盘

年/年

老/JJ

,/

威尔/医学博士

加入/VB

日期/DT

板/NN

作为/输入

应付账款

非执行/JJ

主任/NN

11月/NNP

29/光盘

./。你知道吗

先生/NNP 维肯/NNP

是/VBZ

主席/NN


Tags: 文件inposforifmainsysfilename