代码之家  ›  专栏  ›  技术社区  ›  Alex Budovski

如何不敏感地计算明文文件大小写中的唯一项?

  •  2
  • Alex Budovski  · 技术社区  · 16 年前

    这可以是任何可能在典型类unix系统上可用的高级语言(Python、Perl、awk、标准unix-utils{sort、uniq}等)。希望它足够快,可以报告2MB文本文件的唯一术语总数。

    我只需要这个来快速检查理智,所以它不需要精心设计。

    记住,对案件不敏感。

    附注:如果你使用Python,请不要使用仅支持版本3的代码。我运行它的系统只有2.4.4。

    8 回复  |  直到 16 年前
        1
  •  6
  •   Christoffer    16 年前

    在Perl中:

    my %words; 
    while (<>) { 
        map { $words{lc $_} = 1 } split /\s/); 
    } 
    print scalar keys %words, "\n";
    
        2
  •  5
  •   tzot    16 年前

    使用bash/UNIX命令:

    sed -e 's/[[:space:]]\+/\n/g' $FILE | sort -fu | wc -l
    
        3
  •  4
  •   pts    16 年前

    在Python 2.4中(可能也适用于早期系统):

    #! /usr/bin/python2.4
    import sys
    h = set()
    for line in sys.stdin.xreadlines():
      for term in line.split():
        h.add(term)
    print len(h)
    

    在Perl中:

    $ perl -ne 'for (split(" ", $_)) { $H{$_} = 1 } END { print scalar(keys%H), "\n" }' <file.txt
    
        4
  •  4
  •   cjs    16 年前

    < somefile tr 'A-Z[:blank:][:punct:]' 'a-z\n' | sort | uniq -c
    

    tr [:blank:][:punct:] 使用一个包含所有空格和标点符号的列表,您希望将其视为单词的分隔符,而不是单词的一部分,例如 \t.,;

    | sort -r -n “到此为止。

    请注意,这也会产生不相关的空白标记计数;如果你对此感到担忧 你可以使用sed过滤掉空行。

        5
  •  4
  •   jmcnamara    16 年前

    这是一个Perl单行代码:

    perl -lne '$h{lc $_}++ for split /[\s.,]+/; END{print scalar keys %h}' file.txt
    

    perl -lne '$h{lc $_}++ for split /[\s.,]+/; END{printf "%-12s %d\n", $_, $h{$_} for sort keys %h}' file.txt
    

        6
  •  3
  •   Hynek -Pichi- Vychodil Paulo Suassuna    16 年前

    perl -nE'@w{map lc,split/\W+/}=();END{say 0+keys%w}'
    

    perl -lne'@w{map lc,split/\W+/}=();END{print 0+keys%w}'
    
        7
  •  3
  •   elifiner    16 年前

    Python的一个简短版本:

    print len(set(w.lower() for w in open('filename.dat').read().split()))
    

    python -c "print len(set(w.lower() for w in open('filename.dat').read().split()))"
    
        8
  •  0
  •   Hirofumi Saito    16 年前

    这是一个awk oneliner。

    $ gawk -v RS='[[:space:]]' 'NF&&!a[toupper($0)]++{i++}END{print i}' somefile
    
    • 独特的词语”。