是否有任何api/lib for python会让我得到一个单词的同义词?
例如,如果我有"房子"这个词,它将返回"建筑物,住所,大厦等......"
我在meta上问了这个问题,但我现在意识到它可能更适合主站点,因为它是一个与任何基于标记的系统相关的一般性问题(我很乐意根据人们的想法关闭/删除一个)问题应该去)
我有一个类似的标记数据系统,我遇到了与SOF相同的问题,我有很多标签真的是一样的东西.我正在尝试创建类似于SOF的标记同义词页面,以支持组织此信息.
关于标签同义词的关系和"数据模型"的几个问题:
我假设主标记可以有多个同义标记,但同义标记只能是一个主标记的同义词.那是对的吗?
另外,主标签也可以是同义词标签吗?例如,假设你有一个名为javascript的标签,你有:
大师:js
同义词:java-script,js-web
你还可以:
大师:javascript
同义词:js
因此,在上面的示例中,您将继续解析以最终将js-web解析为javascript,因为主标记:js本身是同义词标记.
此外,这让我觉得你也可以遇到一个循环引用,你有一个
主人:js
同义词:java-script
和
大师:javascript
同义词:js
系统如何处理循环参考?
例如,我在index_synonyms.txt中有同义笔记本电脑,上网本,笔记本
当用户搜索上网本时,我想提升原始文本,然后通过同义词进行扩展?有没有办法在SynonymFilterFactory中指定它?例如,使用原始术语两次,因此他的TF将更大
在localserver(SQL Server 2008 R2)上,我有一个名为syn_view1指向链接服务器的同义词remoteserver.remotedb.dbo.view1
此SLOW查询需要20秒才能运行.
select e.column1, e.column2
from syn_view1 e
where e.column3 = 'xxx'
and e.column4 = 'yyy'
order by e.column1
Run Code Online (Sandbox Code Playgroud)
此FAST查询需要1秒才能运行.
select e.column1, e.column2
from remoteserver.remotedb.dbo.view1 e
where e.column3 = 'xxx'
and e.column4 = 'yyy'
order by e.column1
Run Code Online (Sandbox Code Playgroud)
两个查询的唯一区别实际上是同义词的存在.显然,同义词会影响查询的性能.
SLOW查询的执行计划是:
Plan Cost % Subtree cost
4 SELECT
I/O cost: 0.000000 CPU cost: 0.000000 Executes: 0
Cost: 0.000000 0.00 3.3521
3 Filter
I/O cost: 0.000000 CPU cost: 0.008800 Executes: 1
Cost: 0.008800 …Run Code Online (Sandbox Code Playgroud) sql-server performance linked-server synonym sql-server-2008-r2
我正在尝试在Solr中设置一些基本的同义词.我一直在努力的是:
我们,美国,美国
我的理解是,将其添加到同义词文件将允许用户搜索美国,并获取包含美国或美国的文档.如果用户投入美国或美国,则同样如此.
不幸的是,有了这个,当我进行搜索时,我会得到包含所有三个单词的项目的结果 - 它正在对同义词进行AND而不是OR.
如果我打开调试,这确实是我所看到的(加上一些词干):
(+DisjunctionMaxQuery(((westCite:us westCite:usa westCite:unit) | (text:us text:usa text:unit) | (docketNumber:us docketNumber:usa docketNumber:unit) | ((status:us status:usa status:unit)^1.25) | (court:us court:usa court:unit) | (lexisCite:us lexisCite:usa lexisCite:unit) | ((caseNumber:us caseNumber:usa caseNumber:unit)^1.25) | ((caseName:us caseName:usa caseName:unit)^1.5))))/no_coord
我做错了导致这个吗?我的defaultOperator设置为AND,但我希望同义词过滤器能够理解它.
快速提问,我不知道如何处理包含空格的同义词!我有以下配置:
SOLR配置文件
<fieldType ... >
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
catenateWords="1"
preserveOriginal="1"
splitOnCaseChange="1"
generateWordParts="1"
generateNumberParts="1"
catenateNumbers="1"
catenateAll="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="30" side="front"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LengthFilterFactory" min="2" max="70" />
<filter class="solr.SynonymFilterFactory" synonyms="syn.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)
我的文件:syn.txt
st., st => saint
istambul => istanbul
airport, apt => aéroport
NYC => New York
pt., pt => port
brussels => bruxelles
Run Code Online (Sandbox Code Playgroud)
一切都很好,除了同义词:
"NYC => New York"
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,发现了以下内容: …
出于好奇,有没有办法编辑现有的同义词?也就是说,改变同义词指向的表...
到目前为止,我似乎不得不删除并重新创建它们,因为它们被锁定而不被编辑.这不是什么大问题,但与此同时它有点刺激.
GUI或脚本,但最好是GUI.
我在一个SQL Server 2005实例上有多个数据库.我在一个数据库上创建了一个同义词来访问另一个数据库上的表,在编写查询时,我想利用一个特定的索引,但是,在评估时执行计划,它似乎没有使用它.如果我编写查询以显式访问数据库,它可以工作,但我似乎无法使用同义词使其工作.例如:
select *
from testdb..testtable with (index(testindex))
|--Nested Loops(Inner Join, OUTER REFERENCES:([testdb].[dbo].[testtable].[id]))
|--Index Scan(OBJECT:([testdb].[dbo].[testtable].[testindex]))
|--Clustered Index Seek(OBJECT:([testdb].[dbo].[testtable].[PK_testtable]), SEEK:([testdb].[dbo].[testtable].[id]=[testdb].[dbo].[testtable].[id]) LOOKUP ORDERED FORWARD)
Run Code Online (Sandbox Code Playgroud)
不会产生与之相同的执行计划
select *
from testdb_synonym with (index(testindex))
|--Clustered Index Scan(OBJECT:([testdb].[dbo].[testtable].[PK_testtable]))
Run Code Online (Sandbox Code Playgroud)
这是同义词的限制还是我需要做些什么才能让它发挥作用?
有没有一种简单的方法可以为不同数据库中的所有表创建同义词?
谢谢
编辑:我有一些存储过程将一些表模式硬编码到选择查询中.将模式复制到新服务器时,SP会失败,因为模式不存在.我对目标服务器的控制很少,我不想更改所有的SP,所以我认为同义词可能是一个很好的解决方案.
我需要帮助了解用户在指向另一个(不同的)架构对象时创建SYNONYM所需的授权/特权.
当我尝试以下操作时,我得到ora-01031权限不足,显然我失踪并且未能应用其他所需权限.我尽可能地搜索,但找不到任何特定于跨模式同义词的东西.
CREATE USER test IDENTIFIED BY pw DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
ALTER USER test IDENTIFIED BY pw;
GRANT CONNECT, RESOURCE TO test;
-- ... create a bunch of stuff in test...
CREATE USER READWRITE IDENTIFIED BY pw DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
ALTER USER READWRITE IDENTIFIED BY pw;
GRANT CONNECT, RESOURCE TO READWRITE;
GRANT SELECT ON GDACS.FIXALARMS TO PUBLIC;
GRANT UPDATE, INSERT ON GDACS.FIXALARMS TO READWRITE;
CONNECT READWRITE/pw;
CREATE SYNONYM FIXALARMS for test.FIXALARMS;
ORA-01031 insufficient privileges
Run Code Online (Sandbox Code Playgroud) synonym ×10
sql-server ×4
solr ×3
database ×1
grant ×1
indexing ×1
nlp ×1
oracle ×1
performance ×1
privileges ×1
python ×1
schema ×1
solr-schema ×1
sql ×1
tags ×1
tokenize ×1