本质上,我使用python库来查询单词的同义词,然后将该单词及其同义词添加到postgreSQL表中。如果一些表列是空的,那么就可以了,但是我不知道如何将同义词插入到数据库中,因为我不知道会有多少列。
例如,我有一个6列表,1表示原始单词,5表示同义词。一句话,我可能得到3个同义词,但对于其他人,我可能得到全部5个。
我成功地对此任务进行编程的唯一方法是这样一组糟糕的if语句:
for word in textlist:
syns = dictionary.synonym(word)
num = len(syns)
if len(syns) == 5:
for i in syns:
syn1 = i[0]
syn2 = i[1]
syn3 = i[2]
syn4 = i[3]
syn5 = i[4]等等..。然后使用这些变量将同义词插入到数据库表中。
我所想到的一种方法是构建另一个单词和同义词列表,然后循环将其添加到表中。但我不知道该怎么做。任何关于如何进一步推动的帮助都将是很大的帮助。谢谢。
注意: syns返回一个list对象。
编辑:
因此,多亏了@systemjack,我以这样的方式更改了系统,即有3个表列。id (这是一个连续的主键)、word和synos (最初是syn,但只是为了确保它不是某个奇怪的关键字)。每个单词应该与一个同义词一起添加到一行中,然后下一行可以是具有不同同义词的同一个单词,因此on...Anyway,新方法如下:
for word in textlist:
syns = dictionary.synonym(word)
if syns is not None:
for syn in syns:
cursor.execute('INSERT INTO wordsyn (word, "synos") VALUES (%s, %s);', (word, syn))不过,我现在得到了错误psycopg2.ProgrammingError: column "synos" of relation "wordsyn" does not exist LINE 1: INSERT INTO wordsyn (word, "synos") VALUES ('&c
我在synos周围加了双引号,试图让它起作用,但是没有它们,它也不能工作。任何进一步的帮助都将不胜感激。
\d+ wordsyn输出:

最终编辑:发现问题。没有正确的数据库中的表。我以为\dt只显示了当前数据库中的表,但显然没有。
发布于 2017-03-03 06:19:28
一种典型的关系方法将其设置为具有word列和第二个同义词列的两列表。那么每个单词-同义词组合都会有一行。
在这种情况下,使用数据的查询要简单得多。您真的不想处理可变数量的填充列。另外,如果一个单词有6个同义词,会发生什么情况?
最简单的实现需要每个字多个插入,但这不是什么大事。同时也有ways to batch up the inserts。
如果您真的希望每个字有一行,可以使用PART和AGG的组合在一列中存储变量数的值。不过,我强烈建议采用前一种方法。
您还可以管理更复杂的动态structures as JSON。
请记住,最后两种方法都要慢得多。
使用第一种方法,插入内容将类似于:
for word in textlist:
syns = dictionary.synonym(word)
for syn in syns:
cursor.execute('insert into syns (word, syn) values (%s, %s);', (word, syn))那么,如果您想查看一个单词的所有同义词,您可以这样做:
select word, string_agg(syn, ', ')
from syns where word='perspicuitous'
group by word;发布于 2017-03-03 12:50:14
一种方法是创建两个表,一个用于单词,另一个用于同义词,如下所示
Word:
id - primary key - could be autogenerated.
word - sring - To store the word
Synoym:
id -- primary key - could be autogenerated.
word_id -- Foreign key to Word table id
synonym -- String - The synonym 对于每个单词,如果word存在,则在Word表中查找,如果没有插入,则只需获取现有条目的id即可。使用dictionary.synonym( word )获取单词的同义词。对于每个同义词,从上面查找带有word id的同义词表和同义词,如果不存在,则插入else移动到下一个同义词。
对所有的单词重复这句话。
选择一个单词的同义词成为一个查询,如下所示:
select syn.synonym from synonym syn , word wd
where wd.id = syn.word_id and wd.word = 'foo'https://stackoverflow.com/questions/42569168
复制相似问题