2011-03-07 6 views

답변

14

이와 비슷한?

 
SELECT DISTINCT word 
FROM ( 
    SELECT regexp_split_to_table(some_column, '\s') as word 
    FROM some_table 
) t 

또는 각 단어의 수를 점점 :

 
SELECT some_pk, 
     regexp_split_to_table(some_column, '\s') as word 
FROM some_table 

쉽게 다음 별개의 단어입니다 얻기

 
SELECT word, count(*) 
FROM ( 
    SELECT regexp_split_to_table(some_column, '\s') as word 
    FROM some_table 
) t 
GROUP BY word 
+0

데이터에 따라'lower()'에 열을 감쌀 수도 있습니다. – Brandon

4

하는 공간 ''또는 사이에 다른를 단락 기호로 분할해야 말; 'mywordhere'를 'myWord'및 '여기'로 취급하는 등 's'가 아니라 's'가 아니라

SELECT word, count(*) 
FROM ( 
    SELECT regexp_split_to_table(some_column, ' ') as word 
    FROM some_table 
) t 
GROUP BY word 
+4

\ s는 공백 문자 –

+0

에 대한 유효한 정규식 문자 세트입니다. 답변이 명확하게 정규 표현식을 오해하기 때문에 downvoted입니다. – Private

13

또한 예를 들어,이를 위해 PostgreSQL의 텍스트 검색 기능을 사용할 수 있습니다

SELECT * FROM ts_stat('SELECT to_tsvector(''hello dere hello hello ridiculous'')'); 

을 얻을 것입니다 :

word | ndoc | nentry 
---------+------+-------- 
ridicul | 1 |  1 
hello | 1 |  3 
dere | 1 |  1 
(3 rows) 

(PostgreSQL의 언어에 의존 형태소 분석 및 스톱 - 적용 단어 제거는 원하는 단어 일 수도 있고 아닐 수도 있습니다. 사전 대신 simple을 사용하여 중지 단어 제거 및 형태소 분석을 사용 중지 할 수 있습니다. 이상하는 tsvector 열을 얻을 수있는 select 문이 될 수 있습니다.) 아래

중첩 SELECT 문 EE, 그래서 당신은 텍스트 필드의 수에 to_tsvector 함수를 적용하는 기능을 대체 할 수 있으며, 하나의 tsvector으로 그것들을 연결해, 예를 들어 문서의 어떤 부분 집합 :

SELECT * FROM ts_stat('SELECT to_tsvector(''english'',title) || to_tsvector(''english'',body) from my_documents id < 500') ORDER BY nentry DESC; 

는 처음 500 개 문서의 titlebody 필드에서 가져온 총 워드 카운트의 행렬을 얻을 것인가가 발생 수를 내림차순으로 정렬. 각 단어에 대해 발생하는 문서 수 (ndoc 열)도 표시됩니다. http://www.postgresql.org/docs/current/static/textsearch.html

관련 문제