【问题标题】:Removing stopwords from text corpus using linux commandline使用 linux 命令行从文本语料库中删除停用词
【发布时间】:2016-01-08 10:18:09
【问题描述】:

我有大约 200MB 的文本文件 (rawtext.txt),并且在文本文件 (stopwords.txt) 中有一个停用词列表。

I
a
about
an
are
as
at
be
by
com
for

...

我想删除文本语料库中的停用词。但是怎么做?最快最简单的方法是什么?更喜欢像 sed 或 tr 这样的命令行。不想使用 python 或 NLTK。

有人可以帮忙吗?我使用的是 Mac OSX(不是 linux)

【问题讨论】:

    标签: macos sed


    【解决方案1】:

    将您的输入转换为逐行格式,您可以使用grep 对其进行过滤:

    tr -s '[:blank:]' '\n' < rawtext.txt | fgrep -vwf stopwords.txt 
    

    这样您就不必构建任意大的正则表达式,如果您的停用词列表很大,这可能是个问题。

    【讨论】:

    • 将大文本输入(GB 数据)转换为每行一个单词是不可行的。
    • 为什么不可行?您不需要以这种形式存储它,它由管道前半部分的tr 调用完成。你试过了吗? (如果不清楚:rawtext.txt 是您的原始文件;它被tr 更改为逐行字,并用fgrep 过滤。)
    • 嘿。我运行了这个命令,但停止词删除不起作用。 :( 我需要做的就是用空格替换这些停用词。
    • 好吧,我测试了它,它对我有用,所以你必须帮助自己一点:tr 命令是否执行它应该执行的操作?在一个短文件上测试它并检查输出。如果不是,请查看手册并查看tr 是否接受:blank: 字符类(如果不是,请使用tr -s ' ' '\n' 试试运气)。
    • 它在 linux 中对你有用吗?我正在使用 Mac OSX。 mac 终端对我不起作用
    【解决方案2】:

    一个可行的解决方案(也在 Mac OS 中):

    cat rawtext.txt | grep -o -E '[a-zA-Z]{3,}' | tr '[:upper:]' '[:lower:]' | sort | uniq | grep -vwFf stopwords.txt
    

    这将仅提取 3 个字母的单词(不带数字),转换为小写字母,排序并获取唯一值,然后使用停用词进行过滤。

    确保以相同的方式处理 stopwords.txt(例如小写)。

    【讨论】:

    • 该死,这对我有用,但我不想删除重复的非停用词。
    猜你喜欢
    • 1970-01-01
    • 2019-10-26
    • 2015-09-07
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2013-10-14
    相关资源
    最近更新 更多