在SQL中计算文档频率

时间:2014-12-02 23:17:00

标签: sql postgresql postgresql-9.3

如何使用SQL计算文档频率?

文档频率是术语出现的文档(行)数,而不是术语的总数(即术语频率)。

我可以像这样计算术语频率:

create table countries (
  iso char(2) primary key,
  name text not null unique
);

insert into countries values 
('GS', 'South Georgia and the South Sandwich Islands'),
('ZA', 'South Africa');

select
  term
  , count(*) as term_frequency
from 
  countries
  , regexp_split_to_table(name, '[^\.\w]') term
where 
  term <> ''
group by
  term;

但是我不太确定如何获得文档频率(对于“南方”而不是3,应该为2)。

输出应如下所示:

term     document_frequency
---------------------------
South    2
Georgia  1
and      1
the      1
Sandwich 1
Islands  1
Africa   1

2 个答案:

答案 0 :(得分:2)

因此,每学期计算不同文档的数量:

select term, count(DISTINCT iso) as doc_frequency
from   countries
     , regexp_split_to_table(name, '[^\.\w]') term
where  term <> ''
group  by term;

答案 1 :(得分:0)

怎么样:

select count(*) from countries where name similar to concat('\w', term, '\w');

以上是未经测试的,可能有语法错误或4,但我认为一般的想法应该有效。