如何从 postgresql 中的字符串列中删除我的停用词
how to remove my stop words from a string column in postgresql
我有一个带有字符串列的 table。我想删除停用词。我使用了这个看起来不错的查询。
SELECT to_tsvector('english',colName)from tblName order by colName asc;
它不会更新 table
中的列
我想看看 Postgresql 的停用词和查询内容 found.Then 以防我可以用我自己的文件替换它。我也查了这个地址,也没有找到停用词列表文件。实际上,该地址不存在。
$SHAREDIR/tsearch_data/english.stop
没有这样做的功能。
你可以使用这样的东西(在这个例子中是德语):
SELECT array_to_string(tsvector_to_array(to_tsvector('Hallo, Bill und Susi!')), ' ');
array_to_string
-----------------
bill hallo susi
(1 row)
这去除了停用词,但也去除了词干和 non-words,而且它不关心词序,所以我怀疑结果会让你满意。
如果这不符合要求,您可以像这样使用 regexp_replace
:
SELECT regexp_replace('Bill and Susi, hand over or die!', '\y(and|or|if)\y', '', 'g');
regexp_replace
-----------------------------
Bill Susi, hand over die!
(1 row)
但这需要您在查询字符串中包含停用词列表。改进后的版本会将停用词存储在 table.
中
选择的答案与我的要求不符,但我找到了解决方案:
SELECT regexp_replace('Bill and Susi, hand over or die!', '[^ ]*$','');
regexp_replace
-----------------------------
Bill and Susi, hand over or
(1 row)
我有一个带有字符串列的 table。我想删除停用词。我使用了这个看起来不错的查询。
SELECT to_tsvector('english',colName)from tblName order by colName asc;
它不会更新 table
中的列
我想看看 Postgresql 的停用词和查询内容 found.Then 以防我可以用我自己的文件替换它。我也查了这个地址,也没有找到停用词列表文件。实际上,该地址不存在。
$SHAREDIR/tsearch_data/english.stop
没有这样做的功能。
你可以使用这样的东西(在这个例子中是德语):
SELECT array_to_string(tsvector_to_array(to_tsvector('Hallo, Bill und Susi!')), ' ');
array_to_string
-----------------
bill hallo susi
(1 row)
这去除了停用词,但也去除了词干和 non-words,而且它不关心词序,所以我怀疑结果会让你满意。
如果这不符合要求,您可以像这样使用 regexp_replace
:
SELECT regexp_replace('Bill and Susi, hand over or die!', '\y(and|or|if)\y', '', 'g');
regexp_replace
-----------------------------
Bill Susi, hand over die!
(1 row)
但这需要您在查询字符串中包含停用词列表。改进后的版本会将停用词存储在 table.
中选择的答案与我的要求不符,但我找到了解决方案:
SELECT regexp_replace('Bill and Susi, hand over or die!', '[^ ]*$','');
regexp_replace
-----------------------------
Bill and Susi, hand over or
(1 row)