{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# **NER 사전 만들기**\n",
"https://pypi.org/project/mdict-utils/\n",
"1. **MDX 사전파일을** 활용하여 객체에 구분하기\n",
"\n",
"## **1 Sqlite3 데이터 불러오기**\n",
"sqlite3 데이터 불러오기"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# import sqlite3\n",
"# import pandas as pd\n",
"# conn = sqlite3.connect('backup/kordict.db')\n",
"# resp = conn.execute(\"SELECT name FROM sqlite_master WHERE type='table';\")\n",
"# tableNames = [name[0] for name in resp]\n",
"# tableNames"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# %%time\n",
"# df = pd.read_sql_query(\"SELECT * FROM {}\".format(tableNames[1]), conn)\n",
"# itemIndex = df.entry.values.tolist()\n",
"# itemData = df.paraphrase.values.tolist()\n",
"# print(len(itemIndex), itemIndex[:10], df.shape)\n",
"# df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **2 자료 전처리**\n",
"1. regex 를 활용하여 가치있는 **명사내용** 추출하기\n",
"1. \"「1」\" 내용은 동일한 개념의 단어를 정리한 것\n",
"1. sentence 별로 내용의 확인 및 구분이 필요\n",
"\n",
"```html\n",
"대상행동\n",
"
\n",
"대상^행동(代償行動)\n",
"『심리』
자기가 요구하는 바를 얻지 못할 때 그와 비슷한 다른 대상으로 만족을 채우려는 행동. ≒보상 작용\n",
"
「1」ㆍ보상 행동.\\r\\n'\n",
" ```"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# # 색인정보 : 51만개의 단어사전 데이터\n",
"# itemIndex = df.entry.values.tolist()\n",
"# itemData = df.paraphrase.values.tolist()\n",
"# len(itemIndex), itemIndex[:10]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pickle\n",
"with open('../data/nerDict.pk', 'rb') as handle:\n",
" nerDict = pickle.load(handle)\n",
"itemIndex = list(nerDict.Text)\n",
"itemData = list(nerDict.Data)\n",
"len(itemIndex), len(itemData)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## **3 HTML 태그 제거 및 본문선별**\n",
"1. **/font** 태그가 제목 이외에, 세부내용에도 포함됩니다.\n",
"1. 때문에 이를 무조건 적용하기엔 문제가 있어서 Tag 구조를 명확하게 파악하기\n",
"1. 우선 구조에 대한 형태를 몇가지로 확인한 뒤 작업을 진행하기\n",
"\n",
"```python\n",
"'
test
\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "idxNo = 12004\n", "itemTemp = itemData[idxNo].lower()\n", "toknizer = re.compile('<.*?>')\n", "toknizer_class = re.compile('class=\"[a-zA-Z0-9:;\\.\\s\\(\\)\\-\\,]*\"')\n", "# re.sub(toknizer, '', itemTemp)\n", "re.findall(toknizer, itemTemp)[6]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## **3 Regex를 활용하여 구분하기**\n", "본문에 \"\\