微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 文本语料库数据库的数据结构

文本语料库通常用xml表示:

<corpus name="foobar" date="08.09.13" authors="mememe">
  <document filename="br-392">
    <paragraph pnumber="1">
      <sentence snumber="1">
        <word wnumber="1" partofspeech="VB" sensetag="012345678-v" nameentity="None">Hello</word>
        <word wnumber="2" partofspeech="NN" sensetag="876543210-n" nameentity="World">Foo bar</word>
      </sentence>
    </paragraph>
  </document>
</corpus>

当我尝试将语料库放入数据库时​​,我让每行代表一个单词,列就是这样:

| uid | corpusname | docfilename | pnumber | snumber | wnumber | token
| pos | sensetag | ne

| 198317 | foobar | br-392 | 1 | 1 | 1 | Hello | VB | 012345678-v |
None |

| 192184 | foobar | br-392 | 1 | 1 | 1 | foobar | NN | 87654321-n |
World |

我将数据放入sqlite3数据库中:

# I read the xml file and Now it's in memory as such.
w1 = (198317,'foobar','br-392',1,1,1,'hello','VB','12345678-n','Hello')
w2 = (192184,'foobar','br-392',1,1,1,'foobar','NN','87654321-n','World')

con = sqlite3.connect('semcor.db', isolation_level=None)
cur = con.cursor()
engtable = "CREATE TABLE eng(uid INT, corpusname TEXT, docname TEXT,"+\
                        "pnum INT, snum INT, tnum INT,"+\
                        "word TEXT, pos TEXT, sensetag TEXT, ne TEXT)"
cur.execute(engtable)
cur.executemany("INSERT INTO eng VALUES(?,?,?,?,?,?,?,?,?,?)", \
                                wordtokens)

数据库的目的是让我可以运行查询

SELECT * from ENG if paragraph=1;
SELECT * from ENG if sentence=1;
SELECT * from ENG if sentence=1 and pos="NN" or sensetag="87654321-n"
SELECT * from ENG if pos="NN" and sensetag="87654321-n"
SELECT * from ENG if docfilename="br-392"
SELECT * from ENG if corpusname="foobar"

看起来像我上面构建数据库时,我的数据库大小会爆炸,因为每个语料库中的令牌数量可能达到数百万或数十亿.

除了通过为一个单词和列的每一行构建一个语料库,它的属性和父属性,我还能如何构建数据库,这样我可以执行查询并获得相同的输出

为了索引大尺寸语料库,

>我应该使用sqlite3以外的其他一些数据库程序吗?
>我是否应该像上面定义的那样使用相同的模式?

解决方法:

And should i still use the same schema for the table as I have defined
above?

从关系数据库设计的角度来看,由于1NF,我将使用xml文件的每个元素的表.
我们将节省空间,我们将帮助DBMS性能.使用该模型,可以应用所需的查询
草案模型将是:

should I be using some other database programs other than sqlite3?

这可以根据您的应用程序规范来回答,例如您在一个月,一年之后将拥有多少数据记录,……将连接多少用户,是OLTP还是OLAP还是混合,项目预算和…… .
BTW看看免费的R-DBMS,如Postgresql,MysqL和像Oracle这样的商业版.
对于Nosql解决方案,看看post可能会有所帮助

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐