Skip to content

Commit 6193f4c

Browse files
committed
readme & db build guide
1 parent 1bc7ff1 commit 6193f4c

18 files changed

Lines changed: 398 additions & 169 deletions

.github/demo.jpg

284 KB
Loading

readme.md

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,56 @@
1-
# GenshinSentence
1+
# Genshin Text Search
22

3-
施工中……
3+
## Demo
44

5-
数据库的DDL请参考databaseDDL.sql文件
5+
![img](.github/demo.jpg)
6+
7+
## 简介
8+
原神文本搜索工具,可按关键字搜索所有文本内容,并可以选择任意语言,播放对应的语音,可用于**外语学习**,剧情考据,模型训练等用途
9+
10+
设置搜索语言,并输入关键词搜索后,系统会展示多语言结果,如果该语言有对应的发音,则可以点击按钮播放。同时,下方会显示文本的来源
11+
12+
本工具可以设置搜索使用的语言、结果显示语言。
13+
14+
> 原神游戏内置了15种语言与4种配音。截止到4.5版本,原神的英文文本已经有大约460万条文本与12万条语音数据,其中涵盖了不同难度的词汇,可以作为语言学习的参考,加深记忆
15+
>
16+
> (做这个工具的初衷是由于某翻译平台机器发音的例句过多
17+
18+
19+
## 使用方法
20+
21+
1.`release`板块下载打包好的程序与预导入的数据库的压缩文件,将其解压,然后将`data.db`暂时放入`dbBuild`文件夹
22+
2. 安装环境:
23+
```shell
24+
pip install -r requirements.txt
25+
```
26+
3. 按照[这篇教程](./server/dbBuild/readme.md)导入语言文件
27+
4. 创建`config.json`文件,设置初始的游戏资源路径,显示语言,默认搜索语言,来源显示语言,格式看起来像这样:
28+
29+
语言代码请参考上述教程中的代码(1:简体中文,4:英语)
30+
```json
31+
{
32+
"resultLanguages": [1, 4], // 显示语言
33+
"defaultSearchLanguage": 4, // 默认搜索使用的语言
34+
// 游戏资源路径,一般是YuanShen_Data或者GenshinImpact_Data
35+
"assetDir": "D:\\ys\\Genshin Impact Game\\YuanShen_Data",
36+
"sourceLanguage": 1 // 来源显示的语言
37+
}
38+
```
39+
5. 在游戏中下载好想听的语音包
40+
6. 运行`server.py`即可启动服务端,打开`http://127.0.0.1:5000`即可使用
41+
```shell
42+
python server.py
43+
```
44+
45+
## 存在的问题
46+
47+
1. 目前仅做了剧情对话文本、角色语言的溯源,其余一律显示为“其他文本”,如果您愿意提供其他文本的溯源方法,欢迎提出pr
48+
2. 语音来源也有许多,目前仅完成了剧情对话、角色详情的语音与文本的对照
49+
3. 不同语言之间的文本意义并非完全相同,使用时还请仔细甄别
50+
51+
## 其他
52+
53+
1. 原神,及其语音和文本版权不属于我,本仓库也不提供语音或文本的下载,提供的数据库仅对文本条目进行了索引,不含具体的文本。
54+
2. 语音直接读取自游戏数据包,并且不会对其进行任何修改
55+
3. pck读取脚本来自于[BUnipendix/WwiseFilePackager](https://github.com/BUnipendix/WwiseFilePackager)
56+
4. wem格式转换使用了[vgmstream](https://github.com/vgmstream/vgmstream)的wasm版本

server/databaseDDL.sql

Lines changed: 0 additions & 92 deletions
This file was deleted.

server/databaseHelper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from contextlib import closing
33

44
# 没人会给一个词典搞高并发吧?
5-
conn = sqlite3.connect("test.db", check_same_thread=False)
5+
conn = sqlite3.connect(r"Z:\data.db", check_same_thread=False)
66

77

88
def selectTextMapFromKeyword(keyWord: str, langCode: int):

server/dbBuild/DBBuild.py

Lines changed: 25 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,9 @@
11
import os
22
import sqlite3
33
import json
4-
5-
DATA_PATH = r'G:\AnimeGameData'
6-
7-
conn = sqlite3.connect("../test.db")
8-
9-
10-
def importTextMap(mapName: str):
11-
cursor = conn.cursor()
12-
13-
sql1 = "insert or ignore into langCode(codeName) values (?)"
14-
# 创建
15-
cursor.execute(sql1, (mapName,))
16-
cursor.fetchall()
17-
18-
sql2 = "select id from langCode where codeName = ?"
19-
cursor.execute(sql2, (mapName,))
20-
ans2 = cursor.fetchall()
21-
langId = ans2[0][0]
22-
23-
# 加数据
24-
sql3 = "insert or ignore into textMap(hash, content, lang) values (?,?,?)"
25-
textMap = json.load(open(DATA_PATH + "\\TextMap\\" + mapName, encoding='utf-8'))
26-
for hashVal, content in textMap.items():
27-
cursor.execute(sql3, (hashVal, content, langId))
28-
29-
cursor.close()
30-
conn.commit()
31-
32-
33-
def importAllTextMap():
34-
files = os.listdir(DATA_PATH + "\\TextMap")
35-
for fileName in files:
36-
print("Now: " + fileName)
37-
importTextMap(fileName)
38-
39-
40-
4+
from DBConfig import conn, DATA_PATH
5+
import voiceItemImport
6+
from tqdm import tqdm
417

428
def importTalk(fileName: str):
439
cursor = conn.cursor()
@@ -92,8 +58,8 @@ def importTalk(fileName: str):
9258
def importAllTalkItems():
9359
files = os.listdir(DATA_PATH + "\\BinOutput\\Talk\\Quest\\")
9460
n = len(files)
95-
for val, fileName in enumerate(files):
96-
print("Now: {} {}/{}".format(fileName, val, n))
61+
for val, fileName in tqdm(enumerate(files), total=len(files)):
62+
# print("Now: {} {}/{}".format(fileName, val, n))
9763
importTalk(fileName)
9864

9965

@@ -154,7 +120,6 @@ def importQuest(fileName: str):
154120
chapterId = obj[keyChapterId]
155121
else:
156122
chapterId = None
157-
print("questId {} don't have chapterId!".format(questId))
158123

159124
cursor.execute(sql1, (questId, titleTextMapHash, chapterId))
160125

@@ -173,8 +138,8 @@ def importQuest(fileName: str):
173138
def importAllQuests():
174139
files = os.listdir(DATA_PATH + "\\BinOutput\\Quest\\")
175140
n = len(files)
176-
for val, fileName in enumerate(files):
177-
print("Now: {} {}/{}".format(fileName, val, n))
141+
for val, fileName in tqdm(enumerate(files), total=len(files)):
142+
# print("Now: {} {}/{}".format(fileName, val, n))
178143
importQuest(fileName)
179144
conn.commit()
180145

@@ -191,7 +156,24 @@ def importChapters():
191156
conn.commit()
192157

193158

159+
def main():
160+
print("Importing talks...")
161+
importAllTalkItems()
162+
print("Importing avatars...")
163+
importAvatars()
164+
print("Importing fetters...")
165+
importFetters()
166+
print("Importing quests...")
167+
importAllQuests()
168+
print("Importing chapters...")
169+
importChapters()
170+
print("Importing voices...")
171+
voiceItemImport.loadAvatars()
172+
voiceItemImport.importAllVoiceItems()
173+
print("Done!")
174+
175+
194176
if __name__ == "__main__":
195-
# importChapters()
177+
main()
196178
pass
197179

server/dbBuild/DBConfig.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import sqlite3
2+
3+
# Dim的解包数据仓库所在的文件夹,如果只是导入语言包不用管
4+
DATA_PATH = r'G:\AnimeGameData'
5+
6+
# Dim的解包数据的TextMap文件夹位置,请在其中放置需要导入的语言json,并保持其TextMapXX.json的文件名不变
7+
LANG_PATH = r'./langs'
8+
9+
# 导入/生成的数据库的位置,默认为../data.db,如果要新建从头建立数据库建议选一个其他位置
10+
conn = sqlite3.connect(r"./data.db")
11+
12+
# 所有数据库相关的操作请在dbBuild目录下运行脚本!

server/dbBuild/DBInit.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from DBConfig import conn
2+
3+
4+
def build():
5+
sqlFile = open("./databaseDDL.sql", 'r', encoding='utf8')
6+
sql = sqlFile.read()
7+
cursor = conn.cursor()
8+
cursor.executescript(sql)
9+
cursor.close()
10+
conn.commit()
11+
print("Done. Go running DBBuild.py to import more data.")
12+
13+
14+
if __name__ == "__main__":
15+
build()

0 commit comments

Comments
 (0)