我想我可以取一个文本并从中删除高频英语单词。通过关键字,我的意思是我想提取最能表征文本内容的词(标签)。它不一定是完美的,一个好的近似值非常适合我的需求。
有没有人做过这样的事情?你知道有这样的 Perl 或 Python 库吗?
Lingua::EN::Tagger 正是我所要求的,但是我需要一个也可以用于法语文本的库。
您可以尝试使用 perl 模块Lingua::EN::Tagger来获得快速简便的解决方案。
更复杂的模块Lingua::EN::Semtags::Engine使用 Lingua::EN::Tagger 和 WordNet 数据库来获得更结构化的输出。两者都非常易于使用,只需在安装模块后查看 CPAN 上的文档或使用 perldoc。
要查找文本中最常用的单词,请执行以下操作:
#!/usr/bin/perl -w
use strict;
use warnings 'all';
# Read the text:
open my $ifh, '<', 'text.txt'
or die "Cannot open file: $!";
local $/;
my $text = <$ifh>;
# Find all the words, and count how many times they appear:
my %words = ( );
map { $words{$_}++ }
grep { length > 1 && $_ =~ m/^[\@a-z-']+$/i }
map { s/[",\.]//g; $_ }
split /\s/, $text;
print "Words, sorted by frequency:\n";
my (@data_line);
format FMT =
@<<<<<<<<<<<<<<<<<<<<<<... @########
@data_line
.
local $~ = 'FMT';
# Sort them by frequency:
map { @data_line = ($_, $words{$_}); write(); }
sort { $words{$b} <=> $words{$a} }
grep { $words{$_} > 2 }
keys(%words);
示例输出如下所示:
john@ubuntu-pc1:~/Desktop$ perl frequency.pl
Words, sorted by frequency:
for 32
Jan 27
am 26
of 21
your 21
to 18
in 17
the 17
Get 13
you 13
OTRS 11
today 11
PSM 10
Card 10
me 9
on 9
and 9
Offline 9
with 9
Invited 9
Black 8
get 8
Web 7
Starred 7
All 7
View 7
Obama 7
在 Perl 中有Lingua::EN::Keywords。
做你想做的最简单的方法是......
>>> text = "这是一些示例文本" >>> words = [set(text.split(" ")) if len(word) > 3] >>> 话 ['this', 'some', 'sample', 'text']
我不知道有什么标准模块可以做到这一点,但是用查找一组常见的英语单词来替换对三个字母单词的限制并不难。
一种衬线解决方案(超过两个字符的单词出现两次以上):
perl -ne'$h{$1}++while m/\b(\w{3,})\b/g}{printf"%-20s %5d\n",$_,$h{$_}for sort{$h{$b}<=>$h{$a}}grep{$h{$_}>2}keys%h'
编辑:如果想按字母顺序对频率相同的单词进行排序,可以使用这个增强的:
perl -ne'$h{$1}++while m/\b(\w{3,})\b/g}{printf"%-20s %5d\n",$_,$h{$_}for sort{$h{$b}<=>$h{$a}or$a cmp$b}grep{$h{$_}>2}keys%h'
TF-IDF(词频 - 逆文档频率)就是为此而设计的。
基本上它会问,与所有文档相比,该文档中哪些词是频繁出现的?
它会给所有文档中出现的单词打低分,给给定文档中频繁出现的单词打高分。
您可以在此处查看计算工作表:
https://docs.google.com/spreadsheet/ccc?key=0AreO9JhY28gcdFMtUFJrc0dRdkpiUWlhNHVGS1h5Y2c&usp=sharing
(切换到底部的 TFIDF 选项卡)
这是一个python库:
我认为仍然保持简单的最准确方法是计算源中的单词频率,然后根据它们在普通英语(或任何其他语言)使用中的频率对它们进行加权。
较不常用的词(如“咖啡屋”)比出现频率更高的词(如“狗”)更有可能成为关键字。尽管如此,如果您的消息来源提到“狗”500 次和“咖啡屋”两次,则“狗”更有可能是关键字,即使它是一个常用词。
决定权重方案将是困难的部分。