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

标签 python database database-design sqlite nlp

文本语料库通常用 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"

似乎当我按上述方式构建数据库时,我的数据库规模爆炸式增长,因为每个语料库中的标记数量可能高达数百万或数十亿。

除了通过让每一行对应一个词、每一列对应一个词的属性和父属性来构建语料库之外,我还能如何构建数据库,以便我可以执行查询并获得相同的输出?

为了索引大型语料库,

  1. 我应该使用 sqlite3 以外的其他数据库程序吗?

  2. 我是否仍应为表使用我在上面定义的相同架构?

最佳答案

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

从关系数据库设计的角度来看,由于1NF ,我将为 xml 文件的每个元素使用一个表。
我们将节省空间并帮助提高 DBMS 性能。
使用该模型,所需的查询将适用
草稿模型将是:

model

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

这可能会根据您的应用程序规范来回答,例如一个月、一年之后您将拥有多少数据记录,...,将连接多少用户,是 OLTP 还是 OLAP 或混合,项目预算还有……
顺便说一句,看看免费的 R-DBMS,如 PostgreSQL、MySQL 和商业的,如 Oracle。
对于 NoSql 解决方案,请查看 post可能会有帮助

关于python - 文本语料库的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18681755/

相关文章:

database-design - SQL Server 2008 : When can I NOT modify table structure? 什么时候不能删除一行?

Python/Tweepy 转发以下 Twitter 帐户

php - 关于交易行为的两个快速问题

mysql - WordPress Live 站点中的链接图像正在重定向到本地主机

mysql - 进行单个插入的更快方法?

sql - 如果 X 确定 Y 那么 Y 可以是一个集合吗?

mysql - friend 分享数据库设计

python - Pyinstaller 不使用 sklearn 编译导入的模块

python - 如何实现@property

python - 获取networkx中匹配节点的列表