{"nbformat":4,"nbformat_minor":0,"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.1"},"colab":{"name":"typical_methods_spacy.ipynb","provenance":[{"file_id":"1_qFR9Dfdkhwww84RlNO8V3h_tVDndCN8","timestamp":1618294201450}],"collapsed_sections":[],"toc_visible":true}},"cells":[{"cell_type":"markdown","metadata":{"id":"d7GEdY43-cX6"},"source":["# 代表的な自然言語処理; 日本語, spacyコード編\n","- [補足説明](./typical_methods.md)\n","- mecabによる形態素解析\n","    - 出力オプションの例\n","    - ノード単位で処理し、原型取得する例\n","- NLTKの利用\n","    - KWIC（もしくはKWIC index）\n","    - コロケーション（collocations）\n","    - 単語の出現頻度順\n","    - 単語の条件付き出現頻度\n","- KNPによる係り受け解析\n","    - 文節単位での処理例\n","    - 係り受けを利用したクエリ検索例"]},{"cell_type":"markdown","metadata":{"id":"nSt_r56U-ukW"},"source":["## 環境構築\n"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"e7LXIqSH-itH","executionInfo":{"status":"ok","timestamp":1618381265084,"user_tz":-540,"elapsed":95382,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"e96a364d-ccee-4d2d-f4af-12b53ffc62cc"},"source":["!date\n","\n","# 1. spacy, ginzaインストール\n","#!pip install -U spacy ginza\n","!pip install -U ginza\n","\n","# 2. 言語モデルダウンロード sm=small, lg=large\n","!python -m spacy download ja_core_news_sm\n","#!python -m spacy download ja_core_news_lg\n","\n","# 3. NLTKインストール\n","!pip install nltk\n","\n","# 3. データセット用意\n","# データ準備\n","# https://newtechnologylifestyle.net/711-2/\n","# momotaro.txtは、上記を使ってルビを除外したもの。\n","!curl -O https://raw.githubusercontent.com/naltoma/datamining_intro/master/3-nlp/corpus/momotaro.txt\n","!mkdir corpus\n","!mv momotaro.txt corpus/\n","filename = \"./corpus/momotaro.txt\"\n","\n","# 4. matplotlib で日本語フォントを使うための環境構築\n","!pip install japanize-matplotlib\n","\n","# パッケージ管理リストを更新\n","import pkg_resources, imp\n","imp.reload(pkg_resources)\n","\n","!date"],"execution_count":1,"outputs":[{"output_type":"stream","text":["Wed Apr 14 06:19:30 UTC 2021\n","Collecting ginza\n","  Downloading https://files.pythonhosted.org/packages/a6/cc/5d3a9230cf3dd8426d0fc147133eb49913acdb8a6c8828320a7c8e2ae8b9/ginza-4.0.5.tar.gz\n","Collecting spacy<3.0.0,>=2.3.2\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/95/89/1539c4024c339650c222b0b2ca2b3e3f13523b7a02671f8001b7b1cee6f2/spacy-2.3.5-cp37-cp37m-manylinux2014_x86_64.whl (10.4MB)\n","\u001b[K     |████████████████████████████████| 10.4MB 8.7MB/s \n","\u001b[?25hCollecting ja_ginza<4.1.0,>=4.0.0\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/89/7d/c8778b5472082da8488b2686cbab3e34ab371fa038c1a712a8d55d8dba2b/ja_ginza-4.0.0.tar.gz (51.5MB)\n","\u001b[K     |████████████████████████████████| 51.5MB 83kB/s \n","\u001b[?25hCollecting SudachiPy>=0.4.9\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/86/c9/1ccdbb8cb70925b6a6b0b99c2574b453c1dfee08695dd1ebbe6f966bc42f/SudachiPy-0.5.2.tar.gz (70kB)\n","\u001b[K     |████████████████████████████████| 71kB 4.1MB/s \n","\u001b[?25hCollecting SudachiDict-core>=20200330\n","  Downloading https://files.pythonhosted.org/packages/e4/b9/ae63802ffa1cbeca5b984a6ff8afcb70e30448b897feb74904a068897ebc/SudachiDict-core-20201223.post1.tar.gz\n","Requirement already satisfied, skipping upgrade: requests<3.0.0,>=2.13.0 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (2.23.0)\n","Requirement already satisfied, skipping upgrade: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (3.0.5)\n","Requirement already satisfied, skipping upgrade: blis<0.8.0,>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (0.4.1)\n","Requirement already satisfied, skipping upgrade: wasabi<1.1.0,>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (0.8.2)\n","Requirement already satisfied, skipping upgrade: plac<1.2.0,>=0.9.6 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (1.1.3)\n","Requirement already satisfied, skipping upgrade: tqdm<5.0.0,>=4.38.0 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (4.41.1)\n","Requirement already satisfied, skipping upgrade: srsly<1.1.0,>=1.0.2 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (1.0.5)\n","Requirement already satisfied, skipping upgrade: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (1.0.5)\n","Requirement already satisfied, skipping upgrade: catalogue<1.1.0,>=0.0.7 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (1.0.0)\n","Collecting thinc<7.5.0,>=7.4.1\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/9a/92/71ab278f865f7565c37ed6917d0f23342e4f9a0633013113bd435cf0a691/thinc-7.4.5-cp37-cp37m-manylinux2014_x86_64.whl (1.0MB)\n","\u001b[K     |████████████████████████████████| 1.1MB 32.4MB/s \n","\u001b[?25hRequirement already satisfied, skipping upgrade: setuptools in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (54.2.0)\n","Requirement already satisfied, skipping upgrade: numpy>=1.15.0 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (1.19.5)\n","Requirement already satisfied, skipping upgrade: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from spacy<3.0.0,>=2.3.2->ginza) (2.0.5)\n","Collecting sortedcontainers~=2.1.0\n","  Downloading https://files.pythonhosted.org/packages/13/f3/cf85f7c3a2dbd1a515d51e1f1676d971abe41bba6f4ab5443240d9a78e5b/sortedcontainers-2.1.0-py2.py3-none-any.whl\n","Collecting dartsclone~=0.9.0\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/63/6e/3680ae2eb9fe32698f7489630186314106b8464ad37747268ff36fe2dec7/dartsclone-0.9.0-cp37-cp37m-manylinux1_x86_64.whl (473kB)\n","\u001b[K     |████████████████████████████████| 481kB 43.6MB/s \n","\u001b[?25hRequirement already satisfied, skipping upgrade: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy<3.0.0,>=2.3.2->ginza) (3.0.4)\n","Requirement already satisfied, skipping upgrade: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy<3.0.0,>=2.3.2->ginza) (2020.12.5)\n","Requirement already satisfied, skipping upgrade: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy<3.0.0,>=2.3.2->ginza) (1.24.3)\n","Requirement already satisfied, skipping upgrade: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy<3.0.0,>=2.3.2->ginza) (2.10)\n","Requirement already satisfied, skipping upgrade: importlib-metadata>=0.20; python_version < \"3.8\" in /usr/local/lib/python3.7/dist-packages (from catalogue<1.1.0,>=0.0.7->spacy<3.0.0,>=2.3.2->ginza) (3.10.0)\n","Requirement already satisfied, skipping upgrade: Cython in /usr/local/lib/python3.7/dist-packages (from dartsclone~=0.9.0->SudachiPy>=0.4.9->ginza) (0.29.22)\n","Requirement already satisfied, skipping upgrade: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata>=0.20; python_version < \"3.8\"->catalogue<1.1.0,>=0.0.7->spacy<3.0.0,>=2.3.2->ginza) (3.4.1)\n","Requirement already satisfied, skipping upgrade: typing-extensions>=3.6.4; python_version < \"3.8\" in /usr/local/lib/python3.7/dist-packages (from importlib-metadata>=0.20; python_version < \"3.8\"->catalogue<1.1.0,>=0.0.7->spacy<3.0.0,>=2.3.2->ginza) (3.7.4.3)\n","Building wheels for collected packages: ginza, ja-ginza, SudachiPy, SudachiDict-core\n","  Building wheel for ginza (setup.py) ... \u001b[?25l\u001b[?25hdone\n","  Created wheel for ginza: filename=ginza-4.0.5-cp37-none-any.whl size=15896 sha256=aeedfcfb1f949ff0af4a9b8609bd0327c465282b81c7a6434cf2e05914b76aba\n","  Stored in directory: /root/.cache/pip/wheels/a2/4f/b8/74029780ece4fedfa1f16ba6b9b86fdeee8260ade265e3756e\n","  Building wheel for ja-ginza (setup.py) ... \u001b[?25l\u001b[?25hdone\n","  Created wheel for ja-ginza: filename=ja_ginza-4.0.0-cp37-none-any.whl size=51530814 sha256=b4cd3548e65fb54ea7f7e1dcb6a36050c0fd368fbc6a1ce0cf53c22909e22b37\n","  Stored in directory: /root/.cache/pip/wheels/28/5a/c0/95ac590b39eff99c77d729f284341d15a6903e4011d70ff421\n","  Building wheel for SudachiPy (setup.py) ... \u001b[?25l\u001b[?25hdone\n","  Created wheel for SudachiPy: filename=SudachiPy-0.5.2-cp37-cp37m-linux_x86_64.whl size=870187 sha256=b0f1e1cf199c424c977e50ec91c98bd389a4a059aac1af2aa2ca7e8773d419e6\n","  Stored in directory: /root/.cache/pip/wheels/f1/cc/90/8c68725c622127bb3e5dc46756a8c03bd548dc6d756e66c72d\n","  Building wheel for SudachiDict-core (setup.py) ... \u001b[?25l\u001b[?25hdone\n","  Created wheel for SudachiDict-core: filename=SudachiDict_core-20201223.post1-cp37-none-any.whl size=71405681 sha256=ac249b6dcd6d09bc5522d803d53413978a9713b4a98e7aa9d9ead8d7ca440a31\n","  Stored in directory: /root/.cache/pip/wheels/d4/f8/ff/f9465f9313f865acb1c5500f4d538c470b163b674e184a90d7\n","Successfully built ginza ja-ginza SudachiPy SudachiDict-core\n","Installing collected packages: thinc, spacy, ja-ginza, sortedcontainers, dartsclone, SudachiPy, SudachiDict-core, ginza\n","  Found existing installation: thinc 7.4.0\n","    Uninstalling thinc-7.4.0:\n","      Successfully uninstalled thinc-7.4.0\n","  Found existing installation: spacy 2.2.4\n","    Uninstalling spacy-2.2.4:\n","      Successfully uninstalled spacy-2.2.4\n","  Found existing installation: sortedcontainers 2.3.0\n","    Uninstalling sortedcontainers-2.3.0:\n","      Successfully uninstalled sortedcontainers-2.3.0\n","Successfully installed SudachiDict-core-20201223.post1 SudachiPy-0.5.2 dartsclone-0.9.0 ginza-4.0.5 ja-ginza-4.0.0 sortedcontainers-2.1.0 spacy-2.3.5 thinc-7.4.5\n","Collecting ja_core_news_sm==2.3.2\n","\u001b[?25l  Downloading https://github.com/explosion/spacy-models/releases/download/ja_core_news_sm-2.3.2/ja_core_news_sm-2.3.2.tar.gz (7.6MB)\n","\u001b[K     |████████████████████████████████| 7.6MB 8.2MB/s \n","\u001b[?25hRequirement already satisfied: spacy<2.4.0,>=2.3.0 in /usr/local/lib/python3.7/dist-packages (from ja_core_news_sm==2.3.2) (2.3.5)\n","Requirement already satisfied: sudachipy>=0.4.5 in /usr/local/lib/python3.7/dist-packages (from ja_core_news_sm==2.3.2) (0.5.2)\n","Requirement already satisfied: sudachidict_core>=20200330 in /usr/local/lib/python3.7/dist-packages (from ja_core_news_sm==2.3.2) (20201223.post1)\n","Requirement already satisfied: plac<1.2.0,>=0.9.6 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (1.1.3)\n","Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (3.0.5)\n","Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (2.0.5)\n","Requirement already satisfied: srsly<1.1.0,>=1.0.2 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (1.0.5)\n","Requirement already satisfied: setuptools in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (54.2.0)\n","Requirement already satisfied: numpy>=1.15.0 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (1.19.5)\n","Requirement already satisfied: requests<3.0.0,>=2.13.0 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (2.23.0)\n","Requirement already satisfied: wasabi<1.1.0,>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (0.8.2)\n","Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (4.41.1)\n","Requirement already satisfied: thinc<7.5.0,>=7.4.1 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (7.4.5)\n","Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (1.0.5)\n","Requirement already satisfied: blis<0.8.0,>=0.4.0 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (0.4.1)\n","Requirement already satisfied: catalogue<1.1.0,>=0.0.7 in /usr/local/lib/python3.7/dist-packages (from spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (1.0.0)\n","Requirement already satisfied: sortedcontainers~=2.1.0 in /usr/local/lib/python3.7/dist-packages (from sudachipy>=0.4.5->ja_core_news_sm==2.3.2) (2.1.0)\n","Requirement already satisfied: dartsclone~=0.9.0 in /usr/local/lib/python3.7/dist-packages (from sudachipy>=0.4.5->ja_core_news_sm==2.3.2) (0.9.0)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (2020.12.5)\n","Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (2.10)\n","Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (3.0.4)\n","Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests<3.0.0,>=2.13.0->spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (1.24.3)\n","Requirement already satisfied: importlib-metadata>=0.20; python_version < \"3.8\" in /usr/local/lib/python3.7/dist-packages (from catalogue<1.1.0,>=0.0.7->spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (3.10.0)\n","Requirement already satisfied: Cython in /usr/local/lib/python3.7/dist-packages (from dartsclone~=0.9.0->sudachipy>=0.4.5->ja_core_news_sm==2.3.2) (0.29.22)\n","Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata>=0.20; python_version < \"3.8\"->catalogue<1.1.0,>=0.0.7->spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (3.4.1)\n","Requirement already satisfied: typing-extensions>=3.6.4; python_version < \"3.8\" in /usr/local/lib/python3.7/dist-packages (from importlib-metadata>=0.20; python_version < \"3.8\"->catalogue<1.1.0,>=0.0.7->spacy<2.4.0,>=2.3.0->ja_core_news_sm==2.3.2) (3.7.4.3)\n","Building wheels for collected packages: ja-core-news-sm\n","  Building wheel for ja-core-news-sm (setup.py) ... \u001b[?25l\u001b[?25hdone\n","  Created wheel for ja-core-news-sm: filename=ja_core_news_sm-2.3.2-cp37-none-any.whl size=7572679 sha256=bc3aea891ea6181d0d6a2b013ae7b09d00098ab922283e9330d57cb917d3c244\n","  Stored in directory: /tmp/pip-ephem-wheel-cache-6w1zjosc/wheels/a9/90/6f/9fdba619c4403234b2695fd40d77e635a6c80672a6a05920f0\n","Successfully built ja-core-news-sm\n","Installing collected packages: ja-core-news-sm\n","Successfully installed ja-core-news-sm-2.3.2\n","\u001b[38;5;2m✔ Download and installation successful\u001b[0m\n","You can now load the model via spacy.load('ja_core_news_sm')\n","Requirement already satisfied: nltk in /usr/local/lib/python3.7/dist-packages (3.2.5)\n","Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from nltk) (1.15.0)\n","  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n","                                 Dload  Upload   Total   Spent    Left  Speed\n","100 16575  100 16575    0     0  75340      0 --:--:-- --:--:-- --:--:-- 75340\n","Collecting japanize-matplotlib\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/aa/85/08a4b7fe8987582d99d9bb7ad0ff1ec75439359a7f9690a0dbf2dbf98b15/japanize-matplotlib-1.1.3.tar.gz (4.1MB)\n","\u001b[K     |████████████████████████████████| 4.1MB 10.6MB/s \n","\u001b[?25hRequirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from japanize-matplotlib) (3.2.2)\n","Requirement already satisfied: numpy>=1.11 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (1.19.5)\n","Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (1.3.1)\n","Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (2.8.1)\n","Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (0.10.0)\n","Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->japanize-matplotlib) (2.4.7)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->japanize-matplotlib) (1.15.0)\n","Building wheels for collected packages: japanize-matplotlib\n","  Building wheel for japanize-matplotlib (setup.py) ... \u001b[?25l\u001b[?25hdone\n","  Created wheel for japanize-matplotlib: filename=japanize_matplotlib-1.1.3-cp37-none-any.whl size=4120276 sha256=ab44d978253c7da17ff9361554f781a3abbd3ca5ecc028ceb4ab12fd53dc76ab\n","  Stored in directory: /root/.cache/pip/wheels/b7/d9/a2/f907d50b32a2d2008ce5d691d30fb6569c2c93eefcfde55202\n","Successfully built japanize-matplotlib\n","Installing collected packages: japanize-matplotlib\n","Successfully installed japanize-matplotlib-1.1.3\n","Wed Apr 14 06:21:04 UTC 2021\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"D5kBFad5ITS4"},"source":["## 形態素解析"]},{"cell_type":"code","metadata":{"scrolled":true,"colab":{"base_uri":"https://localhost:8080/"},"id":"LXksRV0Z-cYE","executionInfo":{"status":"ok","timestamp":1618381266624,"user_tz":-540,"elapsed":96907,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"529f16ac-b7e4-42f5-ccbd-6d8aed795543"},"source":["# 形態素解析\n","# 学習済みモデルにより解析結果(推定結果)が変わる\n","# Models & Languages: https://spacy.io/usage/models\n","\n","import spacy\n","\n","# Ginza利用\n","nlp = spacy.load(\"ja_ginza\")\n","\n","sentence = \"格闘家ボブ・サップの出身国はどこでしょう。\"\n","doc = nlp(sentence)\n","for sent in doc.sents:\n","  for token in sent:\n","    print(token)\n","  print(\"EOS\")\n","print(\"-----\")\n","\n","# ja_core_news_sm利用\n","nlp = spacy.load(\"ja_core_news_sm\")\n","\n","doc = nlp(sentence)\n","for sent in doc.sents:\n","  for token in sent:\n","    print(token)\n","  print(\"EOS\")\n","\n","# 以下では ginza で実行。\n","nlp = spacy.load(\"ja_ginza\")"],"execution_count":2,"outputs":[{"output_type":"stream","text":["格闘家\n","ボブ\n","・\n","サップ\n","の\n","出身国\n","は\n","どこ\n","でしょう\n","。\n","EOS\n","-----\n","格闘\n","家\n","ボブ\n","・\n","サップ\n","の\n","出身\n","国\n","は\n","どこ\n","でしょう\n","。\n","EOS\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"id":"VkrjvsZ7-cYG","executionInfo":{"status":"ok","timestamp":1618381266625,"user_tz":-540,"elapsed":96892,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"f10b75d3-777b-4f20-88f5-cec93367c49b"},"source":["# parse結果の例\n","\n","import pandas as pd\n","import numpy as np\n","\n","text = '日本予防医学協会の説明に検査項目ごとの基準値が示されている。例えばASTは0〜40U/L、総コレステロールは130〜219mg/dL、HbA1cは4.6〜5.5%といった具合だ。'\n","doc = nlp(text)\n","\n","columns = [\"index\", \".text\", \"t.lemma_\", \".pos_\", \".dep_\",\n","           \".head.text\", \".is_punct\", \".is_digit\", \".like_num\"]\n","index = list(range(len(doc)))\n","data = []\n","for token in doc:\n","  parsed = [token.i, token.text, token.lemma_, token.pos_, token.dep_,\n","            token.head.text, token.is_punct, token.is_digit, token.like_num]\n","  data.append(parsed)\n","\n","df = pd.DataFrame(np.array(data), columns=columns, index=index)\n","df\n"],"execution_count":3,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>index</th>\n","      <th>.text</th>\n","      <th>t.lemma_</th>\n","      <th>.pos_</th>\n","      <th>.dep_</th>\n","      <th>.head.text</th>\n","      <th>.is_punct</th>\n","      <th>.is_digit</th>\n","      <th>.like_num</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>0</td>\n","      <td>日本</td>\n","      <td>日本</td>\n","      <td>PROPN</td>\n","      <td>compound</td>\n","      <td>協会</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>1</td>\n","      <td>予防</td>\n","      <td>予防</td>\n","      <td>NOUN</td>\n","      <td>compound</td>\n","      <td>協会</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>2</td>\n","      <td>医学</td>\n","      <td>医学</td>\n","      <td>NOUN</td>\n","      <td>compound</td>\n","      <td>協会</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>3</td>\n","      <td>協会</td>\n","      <td>協会</td>\n","      <td>NOUN</td>\n","      <td>nmod</td>\n","      <td>説明</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>4</td>\n","      <td>の</td>\n","      <td>の</td>\n","      <td>ADP</td>\n","      <td>case</td>\n","      <td>協会</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>5</th>\n","      <td>5</td>\n","      <td>説明</td>\n","      <td>説明</td>\n","      <td>NOUN</td>\n","      <td>obl</td>\n","      <td>示さ</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>6</th>\n","      <td>6</td>\n","      <td>に</td>\n","      <td>に</td>\n","      <td>ADP</td>\n","      <td>case</td>\n","      <td>説明</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>7</th>\n","      <td>7</td>\n","      <td>検査項目</td>\n","      <td>検査項目</td>\n","      <td>NOUN</td>\n","      <td>compound</td>\n","      <td>ごと</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>8</th>\n","      <td>8</td>\n","      <td>ごと</td>\n","      <td>ごと</td>\n","      <td>NOUN</td>\n","      <td>nmod</td>\n","      <td>基準値</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>9</th>\n","      <td>9</td>\n","      <td>の</td>\n","      <td>の</td>\n","      <td>ADP</td>\n","      <td>case</td>\n","      <td>ごと</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>10</th>\n","      <td>10</td>\n","      <td>基準値</td>\n","      <td>基準値</td>\n","      <td>NOUN</td>\n","      <td>nsubj</td>\n","      <td>示さ</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>11</th>\n","      <td>11</td>\n","      <td>が</td>\n","      <td>が</td>\n","      <td>ADP</td>\n","      <td>case</td>\n","      <td>基準値</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>12</th>\n","      <td>12</td>\n","      <td>示さ</td>\n","      <td>示す</td>\n","      <td>VERB</td>\n","      <td>ROOT</td>\n","      <td>示さ</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>13</th>\n","      <td>13</td>\n","      <td>れ</td>\n","      <td>れる</td>\n","      <td>AUX</td>\n","      <td>aux</td>\n","      <td>示さ</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>14</th>\n","      <td>14</td>\n","      <td>て</td>\n","      <td>て</td>\n","      <td>SCONJ</td>\n","      <td>mark</td>\n","      <td>示さ</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>15</th>\n","      <td>15</td>\n","      <td>いる</td>\n","      <td>いる</td>\n","      <td>AUX</td>\n","      <td>aux</td>\n","      <td>示さ</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>16</th>\n","      <td>16</td>\n","      <td>。</td>\n","      <td>。</td>\n","      <td>PUNCT</td>\n","      <td>punct</td>\n","      <td>示さ</td>\n","      <td>True</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>17</th>\n","      <td>17</td>\n","      <td>例えば</td>\n","      <td>例えば</td>\n","      <td>ADV</td>\n","      <td>advmod</td>\n","      <td>具合</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>18</th>\n","      <td>18</td>\n","      <td>AST</td>\n","      <td>AST</td>\n","      <td>NOUN</td>\n","      <td>nsubj</td>\n","      <td>dL</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>19</th>\n","      <td>19</td>\n","      <td>は</td>\n","      <td>は</td>\n","      <td>ADP</td>\n","      <td>case</td>\n","      <td>AST</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>20</th>\n","      <td>20</td>\n","      <td>0</td>\n","      <td>0</td>\n","      <td>NUM</td>\n","      <td>nummod</td>\n","      <td>L</td>\n","      <td>False</td>\n","      <td>True</td>\n","      <td>True</td>\n","    </tr>\n","    <tr>\n","      <th>21</th>\n","      <td>21</td>\n","      <td>〜</td>\n","      <td>〜</td>\n","      <td>SYM</td>\n","      <td>compound</td>\n","      <td>L</td>\n","      <td>True</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>22</th>\n","      <td>22</td>\n","      <td>40</td>\n","      <td>40</td>\n","      <td>NUM</td>\n","      <td>nummod</td>\n","      <td>L</td>\n","      <td>False</td>\n","      <td>True</td>\n","      <td>True</td>\n","    </tr>\n","    <tr>\n","      <th>23</th>\n","      <td>23</td>\n","      <td>U</td>\n","      <td>u</td>\n","      <td>NOUN</td>\n","      <td>compound</td>\n","      <td>L</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>24</th>\n","      <td>24</td>\n","      <td>/</td>\n","      <td>/</td>\n","      <td>SYM</td>\n","      <td>compound</td>\n","      <td>L</td>\n","      <td>True</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>25</th>\n","      <td>25</td>\n","      <td>L</td>\n","      <td>l</td>\n","      <td>NOUN</td>\n","      <td>nmod</td>\n","      <td>219</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>26</th>\n","      <td>26</td>\n","      <td>、</td>\n","      <td>、</td>\n","      <td>PUNCT</td>\n","      <td>punct</td>\n","      <td>L</td>\n","      <td>True</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>27</th>\n","      <td>27</td>\n","      <td>総</td>\n","      <td>総</td>\n","      <td>NOUN</td>\n","      <td>compound</td>\n","      <td>コレステロール</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>28</th>\n","      <td>28</td>\n","      <td>コレステロール</td>\n","      <td>コレステロール</td>\n","      <td>NOUN</td>\n","      <td>nsubj</td>\n","      <td>219</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>29</th>\n","      <td>29</td>\n","      <td>は</td>\n","      <td>は</td>\n","      <td>ADP</td>\n","      <td>case</td>\n","      <td>コレステロール</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>30</th>\n","      <td>30</td>\n","      <td>130</td>\n","      <td>130</td>\n","      <td>NUM</td>\n","      <td>nummod</td>\n","      <td>219</td>\n","      <td>False</td>\n","      <td>True</td>\n","      <td>True</td>\n","    </tr>\n","    <tr>\n","      <th>31</th>\n","      <td>31</td>\n","      <td>〜</td>\n","      <td>〜</td>\n","      <td>SYM</td>\n","      <td>compound</td>\n","      <td>219</td>\n","      <td>True</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>32</th>\n","      <td>32</td>\n","      <td>219</td>\n","      <td>219</td>\n","      <td>NUM</td>\n","      <td>nummod</td>\n","      <td>dL</td>\n","      <td>False</td>\n","      <td>True</td>\n","      <td>True</td>\n","    </tr>\n","    <tr>\n","      <th>33</th>\n","      <td>33</td>\n","      <td>mg</td>\n","      <td>mg</td>\n","      <td>NOUN</td>\n","      <td>compound</td>\n","      <td>dL</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>34</th>\n","      <td>34</td>\n","      <td>/</td>\n","      <td>/</td>\n","      <td>SYM</td>\n","      <td>compound</td>\n","      <td>dL</td>\n","      <td>True</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>35</th>\n","      <td>35</td>\n","      <td>dL</td>\n","      <td>DL</td>\n","      <td>NOUN</td>\n","      <td>nmod</td>\n","      <td>%</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>36</th>\n","      <td>36</td>\n","      <td>、</td>\n","      <td>、</td>\n","      <td>PUNCT</td>\n","      <td>punct</td>\n","      <td>dL</td>\n","      <td>True</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>37</th>\n","      <td>37</td>\n","      <td>HbA</td>\n","      <td>hba</td>\n","      <td>NOUN</td>\n","      <td>compound</td>\n","      <td>c</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>38</th>\n","      <td>38</td>\n","      <td>1</td>\n","      <td>1</td>\n","      <td>NUM</td>\n","      <td>nummod</td>\n","      <td>c</td>\n","      <td>False</td>\n","      <td>True</td>\n","      <td>True</td>\n","    </tr>\n","    <tr>\n","      <th>39</th>\n","      <td>39</td>\n","      <td>c</td>\n","      <td>c</td>\n","      <td>NOUN</td>\n","      <td>nsubj</td>\n","      <td>%</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>40</th>\n","      <td>40</td>\n","      <td>は</td>\n","      <td>は</td>\n","      <td>ADP</td>\n","      <td>case</td>\n","      <td>c</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>41</th>\n","      <td>41</td>\n","      <td>4.6</td>\n","      <td>4.6</td>\n","      <td>NUM</td>\n","      <td>nummod</td>\n","      <td>%</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>True</td>\n","    </tr>\n","    <tr>\n","      <th>42</th>\n","      <td>42</td>\n","      <td>〜</td>\n","      <td>〜</td>\n","      <td>SYM</td>\n","      <td>compound</td>\n","      <td>%</td>\n","      <td>True</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>43</th>\n","      <td>43</td>\n","      <td>5.5</td>\n","      <td>5.5</td>\n","      <td>NUM</td>\n","      <td>nummod</td>\n","      <td>%</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>True</td>\n","    </tr>\n","    <tr>\n","      <th>44</th>\n","      <td>44</td>\n","      <td>%</td>\n","      <td>％</td>\n","      <td>NOUN</td>\n","      <td>nmod</td>\n","      <td>具合</td>\n","      <td>True</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>45</th>\n","      <td>45</td>\n","      <td>と</td>\n","      <td>と</td>\n","      <td>ADP</td>\n","      <td>case</td>\n","      <td>%</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>46</th>\n","      <td>46</td>\n","      <td>いっ</td>\n","      <td>いう</td>\n","      <td>VERB</td>\n","      <td>fixed</td>\n","      <td>と</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>47</th>\n","      <td>47</td>\n","      <td>た</td>\n","      <td>た</td>\n","      <td>AUX</td>\n","      <td>fixed</td>\n","      <td>と</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>48</th>\n","      <td>48</td>\n","      <td>具合</td>\n","      <td>具合</td>\n","      <td>NOUN</td>\n","      <td>ROOT</td>\n","      <td>具合</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>49</th>\n","      <td>49</td>\n","      <td>だ</td>\n","      <td>だ</td>\n","      <td>AUX</td>\n","      <td>cop</td>\n","      <td>具合</td>\n","      <td>False</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","    <tr>\n","      <th>50</th>\n","      <td>50</td>\n","      <td>。</td>\n","      <td>。</td>\n","      <td>PUNCT</td>\n","      <td>punct</td>\n","      <td>具合</td>\n","      <td>True</td>\n","      <td>False</td>\n","      <td>False</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["   index    .text t.lemma_  .pos_  ... .head.text .is_punct .is_digit .like_num\n","0      0       日本       日本  PROPN  ...         協会     False     False     False\n","1      1       予防       予防   NOUN  ...         協会     False     False     False\n","2      2       医学       医学   NOUN  ...         協会     False     False     False\n","3      3       協会       協会   NOUN  ...         説明     False     False     False\n","4      4        の        の    ADP  ...         協会     False     False     False\n","5      5       説明       説明   NOUN  ...         示さ     False     False     False\n","6      6        に        に    ADP  ...         説明     False     False     False\n","7      7     検査項目     検査項目   NOUN  ...         ごと     False     False     False\n","8      8       ごと       ごと   NOUN  ...        基準値     False     False     False\n","9      9        の        の    ADP  ...         ごと     False     False     False\n","10    10      基準値      基準値   NOUN  ...         示さ     False     False     False\n","11    11        が        が    ADP  ...        基準値     False     False     False\n","12    12       示さ       示す   VERB  ...         示さ     False     False     False\n","13    13        れ       れる    AUX  ...         示さ     False     False     False\n","14    14        て        て  SCONJ  ...         示さ     False     False     False\n","15    15       いる       いる    AUX  ...         示さ     False     False     False\n","16    16        。        。  PUNCT  ...         示さ      True     False     False\n","17    17      例えば      例えば    ADV  ...         具合     False     False     False\n","18    18      AST      AST   NOUN  ...         dL     False     False     False\n","19    19        は        は    ADP  ...        AST     False     False     False\n","20    20        0        0    NUM  ...          L     False      True      True\n","21    21        〜        〜    SYM  ...          L      True     False     False\n","22    22       40       40    NUM  ...          L     False      True      True\n","23    23        U        u   NOUN  ...          L     False     False     False\n","24    24        /        /    SYM  ...          L      True     False     False\n","25    25        L        l   NOUN  ...        219     False     False     False\n","26    26        、        、  PUNCT  ...          L      True     False     False\n","27    27        総        総   NOUN  ...    コレステロール     False     False     False\n","28    28  コレステロール  コレステロール   NOUN  ...        219     False     False     False\n","29    29        は        は    ADP  ...    コレステロール     False     False     False\n","30    30      130      130    NUM  ...        219     False      True      True\n","31    31        〜        〜    SYM  ...        219      True     False     False\n","32    32      219      219    NUM  ...         dL     False      True      True\n","33    33       mg       mg   NOUN  ...         dL     False     False     False\n","34    34        /        /    SYM  ...         dL      True     False     False\n","35    35       dL       DL   NOUN  ...          %     False     False     False\n","36    36        、        、  PUNCT  ...         dL      True     False     False\n","37    37      HbA      hba   NOUN  ...          c     False     False     False\n","38    38        1        1    NUM  ...          c     False      True      True\n","39    39        c        c   NOUN  ...          %     False     False     False\n","40    40        は        は    ADP  ...          c     False     False     False\n","41    41      4.6      4.6    NUM  ...          %     False     False      True\n","42    42        〜        〜    SYM  ...          %      True     False     False\n","43    43      5.5      5.5    NUM  ...          %     False     False      True\n","44    44        %        ％   NOUN  ...         具合      True     False     False\n","45    45        と        と    ADP  ...          %     False     False     False\n","46    46       いっ       いう   VERB  ...          と     False     False     False\n","47    47        た        た    AUX  ...          と     False     False     False\n","48    48       具合       具合   NOUN  ...         具合     False     False     False\n","49    49        だ        だ    AUX  ...         具合     False     False     False\n","50    50        。        。  PUNCT  ...         具合      True     False     False\n","\n","[51 rows x 9 columns]"]},"metadata":{"tags":[]},"execution_count":3}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ALS3tAzQNUkj","executionInfo":{"status":"ok","timestamp":1618381266626,"user_tz":-540,"elapsed":96879,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"1e9f4abd-f691-45a0-98ad-f288d5b4ed35"},"source":["print(\"----Docオブジェクトから名詞句を抽出----\")\n","for np in doc.noun_chunks:\n","    print(np)\n"],"execution_count":4,"outputs":[{"output_type":"stream","text":["----Docオブジェクトから名詞句を抽出----\n","日本予防医学協会\n","説明\n","検査項目ごと\n","基準値\n","AST\n","0〜40U/L\n","総コレステロール\n","130〜219mg/dL\n","HbA1c\n","4.6〜5.5%\n","具合\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"0-5wxPv3Idb5"},"source":["## コンコーダンス（語句集）"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"rzBArHT5-cYG","executionInfo":{"status":"ok","timestamp":1618381271878,"user_tz":-540,"elapsed":102120,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"fd65c4a8-7515-4bee-fd63-11c13bed525e"},"source":["# concordance\n","\n","with open(filename, \"r\") as fh:\n","    sentences = \"\"\n","    for line in fh.readlines():\n","        sentences += line + \" \"\n","\n","import nltk\n","nltk.download('stopwords')\n","\n","def tokenize(sentences):\n","    \"\"\"文章を分かち書きする。\n","\n","    :param sentences(str): 複数の文章を含む文字列。日本語想定。\n","    :return(list): 分かち書きした単語をlistとしてまとめたもの。\n","    \"\"\"\n","    nlp = spacy.load(\"ja_ginza\")\n","    doc = nlp(sentences)\n","    tokens = []\n","    for token in doc:\n","      word = token.text\n","      if word == \" \" or word == \"\\n\":\n","        continue\n","      tokens.append(word)\n","\n","    return tokens\n","\n","tokens = tokenize(sentences)\n","print(len(tokens), tokens[:10])\n","text = nltk.Text(tokens)\n","print('\\n# nltk.Text.concordance with \"おじいさん\"')\n","text.concordance(\"おじいさん\")\n","print('\\n# nltk.Text.concordance with \"じい\"')\n","text.concordance(\"じい\")"],"execution_count":5,"outputs":[{"output_type":"stream","text":["[nltk_data] Downloading package stopwords to /root/nltk_data...\n","[nltk_data]   Unzipping corpora/stopwords.zip.\n","3600 ['Download', 'URL', '\\n ', 'URL', ':', 'https', ':', '/', '/', 'www']\n","\n","# nltk.Text.concordance with \"おじいさん\"\n","No matches\n","\n","# nltk.Text.concordance with \"じい\"\n","Displaying 24 of 24 matches:\n","p \n","  一 \n"," \n"," 　 むかし 、 むかし 、 ある ところ に 、 お じい さん と お ばあ さん が あり まし た 。 まいにち 、 お じい \n"," じい さん と お ばあ さん が あり まし た 。 まいにち 、 お じい さん は 山 へ し ば 刈り に 、 お ばあ さん は 川 へ 洗濯 \n"," 。 \n","  「 お やおや 、 これ は みごと な 桃 だ こと 。 お じい さん へ の お みやげ に 、 どれ どれ 、 うち へ 持っ て 帰り\n"," た 。 お ばあ さん は にこにこ し ながら 、 \n","  「 早く お じい さん と 二人 で 分け て 食べ ましょう 。 」 \n"," 　 と 言っ て\n","おうち へ 帰り まし た 。 \n"," 　 夕方 に なっ て やっと 、 お じい さん は 山 から しば を 背負っ て 帰っ て 来 まし た 。 \n"," \n"," 「 お ばあ さん 、 今 帰っ た よ 。 」 \n","  「 おや 、 お じい さん 、 お かい ん なさい 。 待っ て い まし た よ 。 さあ \n"," いい もの と いう の は 。 」 \n"," 　 こう いい ながら 、 お じい さん は わらじ を ぬい で 、 上 に 上がり まし た 。 その 間\n"," て 来 た 。 それ は いよいよ めずらしい 。 」 \n"," 　 こう お じい さん は 言い ながら 、 桃 を 両手 に のせ て 、 ため つ 、 \n","とび出し まし た 。 \n","  「 お やおや 、 まあ 。 」 \n"," 　 お じい さん も 、 お ばあ さん も 、 びっくり し て 、 二人 いっしょ\n","この 子 を さずけ て 下さっ た に ちがい ない 。 」 \n"," 　 お じい さん も 、 お ばあ さん も 、 うれし がっ て 、 こう 言い ま\n"," がっ て 、 こう 言い まし た 。 \n"," 　 そこ で あわて て お じい さん が お 湯 を わかす やら 、 お ばあ さん が むつき を そ\n"," やおや 、 何 と いう 元気 の いい 子 だろう 。 」 \n"," 　 お じい さん と お ばあ さん は 、 こう 言っ て 顔 を 見合わせ ながら\n","桃太郎 と いう 名 を つけ まし た 。 \n"," \n","  二 \n"," \n"," 　 お じい さん と お ばあ さん は 、 それ は それ は だいじ に し て \n","い でし た が 、 その くせ 気だて は ごく やさしく って 、 お じい さん と お ばあ さん に よく 孝行 を し まし た 。 \n"," 　 桃\n"," なく なり まし た 。 そこ で うち へ 帰る と さっそく 、 お じい さん の 前 へ 出 て 、 \n","  「 どうぞ 、 わたくし に しばらく\n"," お ひま を 下さい 。 」 \n"," 　 と 言い まし た 。 \n"," 　 お じい さん は びっくり し て 、 \n","  「 お前 どこ へ 行く の だ 。\n","さましい こと だ 。 じゃあ 行っ て お いで 。 」 \n"," 　 と お じい さん は 言い まし た 。 \n","  「 まあ 、 そんな 遠方 へ 行く \n"," 　 と お ばあ さん も 言い まし た 。 \n"," 　 そこ で 、 お じい さん と お ばあ さん は 、 お 庭 の まん中 に 、 えん やら \n"," 、 えん やら 、 えん やら 、 大きな 臼 を 持ち出し て 、 お じい さん が きね を 取る と 、 お ばあ さん はこね どり を し て\n"," りっぱ に 鬼 を 退治 し て くる が いい 。 」 \n"," 　 と お じい さん は 言い まし た 。 \n","  「 気 を つけ て 、 けが を し\n"," 　 と 元気 な 声 を のこし て 、 出 て いき まし た 。 お じい さん と お ばあ さん は 、 門 の 外 に 立っ て 、 いつ まで\n","声 を かけ かけ 進ん で いき まし た 。 \n"," 　 うち で は お じい さん と 、 お ばあ さん が 、 かわるがわる 、 \n","  「 もう 桃\n"," とくい らしい 様子 を し て 帰っ て 来 まし た の で 、 お じい さん も お ばあ さん も 、 目 も 鼻 も なくし て 喜び まし \n","い ぞ 、 えらい ぞ 、 それ こそ 日本一 だ 。 」 \n"," 　 と お じい さん は 言い まし た 。 \n","  「 まあ 、 まあ 、 けが が なく\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"IS_WNMK_JcUz"},"source":["## コロケーション（連語）"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"MvEehnnP-cYH","executionInfo":{"status":"ok","timestamp":1618381271879,"user_tz":-540,"elapsed":102108,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"54017dd8-99a0-4d83-b029-d65fa804711f"},"source":["# collocation\n","\n","print(\"\\n# nltk.Text.collocations\")\n","print(\"## default\")\n","text.collocations()\n","\n","print(\"\\n## collocations(window_size=5)\")\n","text.collocations(window_size=5)"],"execution_count":6,"outputs":[{"output_type":"stream","text":["\n","# nltk.Text.collocations\n","## default\n","  　 桃太郎; いかめしい くろがね; さけび ながら;     　 桃太郎\n","\n","## collocations(window_size=5)\n","ドンブラコッコ スッコッコ; ていねい おじぎ; 日本一 だんご; たらこ たらこ; Download URL; URL https;\n","ぎゅうぎゅう 押さえつけ; だんご もらっ;          　; いかめしい くろがね; 下さい ましょう;     　 むかし;\n"," 桃太郎; キャッ キャッ; スッコッコ ドンブラコッコ; ましょう   　; 桃太郎 どちら; 桃太郎 ふり返る;      スッコッコ;\n","ドンブラコッコ\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"bt7ca76OJj8p"},"source":["## 単語の出現頻度"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":369},"id":"RAlgs0Ge-cYH","executionInfo":{"status":"ok","timestamp":1618381272619,"user_tz":-540,"elapsed":102835,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"0febec9a-c032-48b2-d870-6221b7b70652"},"source":["# 単語の出現頻度順\n","\n","print(\"\\n# FreqDist\")\n","fdist = nltk.FreqDist(tokens)\n","check_num = 30\n","print(fdist.most_common(check_num))\n","\n","%matplotlib inline\n","import japanize_matplotlib\n","fdist.plot(check_num)\n"],"execution_count":7,"outputs":[{"output_type":"stream","text":["\n","# FreqDist\n","[('、', 325), ('。', 179), ('て', 147), ('た', 122), ('に', 106), ('と', 105), ('の', 105), ('を', 102), ('は', 93), ('まし', 92), ('お', 81), ('\\n \\u3000', 75), ('\\n ', 67), ('「', 67), ('が', 66), ('」', 66), ('さん', 59), ('で', 46), ('も', 37), ('桃太郎', 37), ('し', 32), ('鬼', 28), ('から', 26), ('じい', 24), ('ばあ', 24), ('へ', 22), ('だ', 20), ('ます', 19), ('ながら', 18), ('言い', 16)]\n"],"name":"stdout"},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"ao8OzoudJnbk"},"source":["## bi-gram"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":359},"id":"M0UV1reW-cYI","executionInfo":{"status":"ok","timestamp":1618381272619,"user_tz":-540,"elapsed":102823,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"babd094b-7706-4cd9-d879-ba4e2de91d95"},"source":["# bigram\n","print(\"\\n# FreqDist with bigram (2-gram)\")\n","bigrams = nltk.bigrams(tokens)\n","bigrams_fdist = nltk.FreqDist(bigrams)\n","print(bigrams_fdist.most_common(check_num))\n","\n","# conditional FreqDist\n","cfd = nltk.ConditionalFreqDist(bigrams_fdist)\n","cfd.plot(conditions=[\"桃太郎\", \"鬼\"])\n"],"execution_count":8,"outputs":[{"output_type":"stream","text":["\n","# FreqDist with bigram (2-gram)\n","[(('まし', 'た'), 92), (('た', '。'), 91), (('。', '」'), 66), (('て', '、'), 64), (('\\n ', '「'), 57), (('」', '\\n \\u3000'), 39), (('。', '\\n \\u3000'), 36), (('。', '\\n '), 32), (('、', 'お'), 28), (('は', '、'), 27), (('と', '、'), 26), (('お', 'じい'), 24), (('じい', 'さん'), 24), (('お', 'ばあ'), 24), (('ばあ', 'さん'), 24), (('に', '、'), 23), (('\\n \\u3000', 'と'), 22), (('し', 'て'), 21), (('さん', 'は'), 19), (('ながら', '、'), 18), (('、', '\\n '), 17), (('で', '、'), 16), (('」', '\\n '), 16), (('を', 'し'), 14), (('て', 'い'), 13), (('桃太郎', 'は'), 13), (('と', 'お'), 12), (('て', '来'), 12), (('から', '、'), 11), (('言い', 'まし'), 11)]\n"],"name":"stdout"},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"gQL4_p5WJ1Kv"},"source":["## 係り受け解析＋格解析"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":545},"id":"MAdtXuE_-cYI","executionInfo":{"status":"ok","timestamp":1618381273312,"user_tz":-540,"elapsed":103499,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"aaa69657-8eb2-4abe-eecc-87cceddb2892"},"source":["print(\"----係り受け木----\")\n","from pathlib import Path\n","from spacy import displacy\n","\n","#sentence = \"お爺さんは山へ芝刈りに、お婆さんは川へ洗濯に行きました。\"\n","sentence = \"お爺さんは山へ芝刈りに行きました。\"\n","doc = nlp(sentence)\n","\n","for sent in doc.sents:\n","    svg = displacy.render(sent, style=\"dep\", jupyter=True)\n"],"execution_count":9,"outputs":[{"output_type":"stream","text":["----係り受け木----\n"],"name":"stdout"},{"output_type":"display_data","data":{"text/html":["<span class=\"tex2jax_ignore\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:lang=\"ja\" id=\"d5a4b9d61b4f48e4a815dd6cc3ce970b-0\" class=\"displacy\" width=\"1975\" height=\"487.0\" direction=\"ltr\" style=\"max-width: none; height: 487.0px; color: #000000; background: #ffffff; font-family: Arial; direction: ltr\">\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"50\">お</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"50\">NOUN</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"225\">爺</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"225\">NOUN</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"400\">さん</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"400\">NOUN</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"575\">は</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"575\">ADP</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"750\">山</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"750\">NOUN</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"925\">へ</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"925\">ADP</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"1100\">芝刈り</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"1100\">NOUN</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"1275\">に</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"1275\">ADP</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"1450\">行き</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"1450\">AUX</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"1625\">まし</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"1625\">AUX</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"397.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"1800\">た。</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"1800\">AUX</tspan>\n","</text>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-0\" stroke-width=\"2px\" d=\"M70,352.0 C70,177.0 390.0,177.0 390.0,352.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-0\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">compound</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M70,354.0 L62,342.0 78,342.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-1\" stroke-width=\"2px\" d=\"M245,352.0 C245,264.5 385.0,264.5 385.0,352.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-1\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">compound</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M245,354.0 L237,342.0 253,342.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-2\" stroke-width=\"2px\" d=\"M420,352.0 C420,2.0 1450.0,2.0 1450.0,352.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-2\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">nsubj</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M420,354.0 L412,342.0 428,342.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-3\" stroke-width=\"2px\" d=\"M420,352.0 C420,264.5 560.0,264.5 560.0,352.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-3\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">case</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M560.0,354.0 L568.0,342.0 552.0,342.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-4\" stroke-width=\"2px\" d=\"M770,352.0 C770,89.5 1445.0,89.5 1445.0,352.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-4\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">obl</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M770,354.0 L762,342.0 778,342.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-5\" stroke-width=\"2px\" d=\"M770,352.0 C770,264.5 910.0,264.5 910.0,352.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-5\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">case</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M910.0,354.0 L918.0,342.0 902.0,342.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-6\" stroke-width=\"2px\" d=\"M1120,352.0 C1120,177.0 1440.0,177.0 1440.0,352.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-6\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">obl</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M1120,354.0 L1112,342.0 1128,342.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-7\" stroke-width=\"2px\" d=\"M1120,352.0 C1120,264.5 1260.0,264.5 1260.0,352.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-7\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">case</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M1260.0,354.0 L1268.0,342.0 1252.0,342.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-8\" stroke-width=\"2px\" d=\"M1470,352.0 C1470,264.5 1610.0,264.5 1610.0,352.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-8\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">aux</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M1610.0,354.0 L1618.0,342.0 1602.0,342.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-9\" stroke-width=\"2px\" d=\"M1470,352.0 C1470,177.0 1790.0,177.0 1790.0,352.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-d5a4b9d61b4f48e4a815dd6cc3ce970b-0-9\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">aux</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M1790.0,354.0 L1798.0,342.0 1782.0,342.0\" fill=\"currentColor\"/>\n","</g>\n","</svg></span>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":478},"id":"DIeFekpWMQvK","executionInfo":{"status":"ok","timestamp":1618381273313,"user_tz":-540,"elapsed":103487,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"c04bcbad-ce1c-4e84-f055-4056813f6365"},"source":["options = {\"compact\": True, \"bg\": \"#090305\",\n","           \"color\": \"white\", \"font\": \"Source Sans Pro\"}\n","for sent in doc.sents:\n","    svg = displacy.render(sent, style=\"dep\", jupyter=True, options=options)\n"],"execution_count":10,"outputs":[{"output_type":"display_data","data":{"text/html":["<span class=\"tex2jax_ignore\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:lang=\"ja\" id=\"08a0a26333b44ca1afcadb2b0404fb4a-0\" class=\"displacy\" width=\"1700\" height=\"437.0\" direction=\"ltr\" style=\"max-width: none; height: 437.0px; color: white; background: #090305; font-family: Source Sans Pro; direction: ltr\">\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"50\">お</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"50\">NOUN</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"200\">爺</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"200\">NOUN</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"350\">さん</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"350\">NOUN</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"500\">は</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"500\">ADP</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"650\">山</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"650\">NOUN</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"800\">へ</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"800\">ADP</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"950\">芝刈り</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"950\">NOUN</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"1100\">に</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"1100\">ADP</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"1250\">行き</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"1250\">AUX</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"1400\">まし</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"1400\">AUX</tspan>\n","</text>\n","\n","<text class=\"displacy-token\" fill=\"currentColor\" text-anchor=\"middle\" y=\"347.0\">\n","    <tspan class=\"displacy-word\" fill=\"currentColor\" x=\"1550\">た。</tspan>\n","    <tspan class=\"displacy-tag\" dy=\"2em\" fill=\"currentColor\" x=\"1550\">AUX</tspan>\n","</text>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-0\" stroke-width=\"2px\" d=\"M62,302.0 62,252.0 344.0,252.0 344.0,302.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-0\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">compound</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M62,304.0 L58,296.0 66,296.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-1\" stroke-width=\"2px\" d=\"M212,302.0 212,277.0 341.0,277.0 341.0,302.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-1\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">compound</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M212,304.0 L208,296.0 216,296.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-2\" stroke-width=\"2px\" d=\"M362,302.0 362,202.0 1250.0,202.0 1250.0,302.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-2\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">nsubj</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M362,304.0 L358,296.0 366,296.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-3\" stroke-width=\"2px\" d=\"M362,302.0 362,277.0 491.0,277.0 491.0,302.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-3\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">case</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M491.0,304.0 L495.0,296.0 487.0,296.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-4\" stroke-width=\"2px\" d=\"M662,302.0 662,227.0 1247.0,227.0 1247.0,302.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-4\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">obl</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M662,304.0 L658,296.0 666,296.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-5\" stroke-width=\"2px\" d=\"M662,302.0 662,277.0 791.0,277.0 791.0,302.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-5\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">case</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M791.0,304.0 L795.0,296.0 787.0,296.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-6\" stroke-width=\"2px\" d=\"M962,302.0 962,252.0 1244.0,252.0 1244.0,302.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-6\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">obl</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M962,304.0 L958,296.0 966,296.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-7\" stroke-width=\"2px\" d=\"M962,302.0 962,277.0 1091.0,277.0 1091.0,302.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-7\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">case</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M1091.0,304.0 L1095.0,296.0 1087.0,296.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-8\" stroke-width=\"2px\" d=\"M1262,302.0 1262,277.0 1391.0,277.0 1391.0,302.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-8\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">aux</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M1391.0,304.0 L1395.0,296.0 1387.0,296.0\" fill=\"currentColor\"/>\n","</g>\n","\n","<g class=\"displacy-arrow\">\n","    <path class=\"displacy-arc\" id=\"arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-9\" stroke-width=\"2px\" d=\"M1262,302.0 1262,252.0 1544.0,252.0 1544.0,302.0\" fill=\"none\" stroke=\"currentColor\"/>\n","    <text dy=\"1.25em\" style=\"font-size: 0.8em; letter-spacing: 1px\">\n","        <textPath xlink:href=\"#arrow-08a0a26333b44ca1afcadb2b0404fb4a-0-9\" class=\"displacy-label\" startOffset=\"50%\" side=\"left\" fill=\"currentColor\" text-anchor=\"middle\">aux</textPath>\n","    </text>\n","    <path class=\"displacy-arrowhead\" d=\"M1544.0,304.0 L1548.0,296.0 1540.0,296.0\" fill=\"currentColor\"/>\n","</g>\n","</svg></span>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{"tags":[]}}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"dAHPlWNsNGfN","executionInfo":{"status":"ok","timestamp":1618381273313,"user_tz":-540,"elapsed":103476,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"22cab22c-dc79-4119-f62b-3dda7132da7a"},"source":["print(\"----Docオブジェクトから名詞句だけを抽出----\")\n","for chunk in doc.noun_chunks:\n","    print(chunk)\n"],"execution_count":11,"outputs":[{"output_type":"stream","text":["----Docオブジェクトから名詞句だけを抽出----\n","お爺さん\n","山\n","芝刈り\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"mBzJHu67XFIb","executionInfo":{"status":"ok","timestamp":1618381273314,"user_tz":-540,"elapsed":103466,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"7fd17813-9d80-48ad-fd1a-8c7fd0618ce4"},"source":["# 名詞句を中心に係り受け\n","print(\"chunk\\troot\\tdep_\\troot.head\")\n","labels = set()\n","for chunk in doc.noun_chunks:\n","    print(chunk.text, chunk.root.text, chunk.root.dep_,\n","            chunk.root.head.text)\n","    labels.add(chunk.root.dep_)\n","\n","print(\"----------\")\n","for label in labels:\n","    print('{} = {}'.format(label, spacy.explain(label)))\n"],"execution_count":12,"outputs":[{"output_type":"stream","text":["chunk\troot\tdep_\troot.head\n","お爺さん さん nsubj 行き\n","山 山 obl 行き\n","芝刈り 芝刈り obl 行き\n","----------\n","nsubj = nominal subject\n","obl = oblique nominal\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"-5fkAao1KYKR"},"source":["## 係り受け解析を利用したクエリ検索の例"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"lz1YYx4p-cYJ","executionInfo":{"status":"ok","timestamp":1618381273314,"user_tz":-540,"elapsed":103453,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"f79ff753-e3e4-4a89-dd8f-d31ffb2782ec"},"source":["# 係り受けを利用したクエリ検索例\n","# 補足：\n","#   係り受け関係が想定と異なっているため、中継単語からの検索まで実装。\n","\n","def search(sentence, user_query):\n","    nlp = spacy.load(\"ja_ginza\")\n","    doc = nlp(sentence)\n","\n","    relay_words = []\n","    candidate_words = []\n","    # 係り受け先（子ノード）検索\n","    print(\"# 係り受け先(子ノード)\")\n","    for chunk in doc.noun_chunks:\n","        if chunk.text == user_query:\n","            if chunk.root.dep_ == 'obl':\n","                relay_words.append(chunk.root.head.text)\n","            if chunk.root.dep_ == 'nsubj':\n","                candidate_words.append(chunk.root.head.text)\n","    \n","    # 中継単語からの検索\n","    if len(relay_words) >= 1:\n","        for word in relay_words:\n","            for chunk in doc.noun_chunks:\n","                if chunk.root.head.text == word:\n","                    if chunk.root.dep_ == 'obl':\n","                        relay_words.append(chunk.text)\n","                    if chunk.root.dep_ == 'nsubj':\n","                        candidate_words.append(chunk.text)\n","    \n","    return relay_words, candidate_words\n","\n","\n","sentence = \"お爺さんは山へ芝刈りに、お婆さんは川へ洗濯に行きました。\"\n","user_query = \"芝刈り\"\n","print('\\n# user_query = {}'.format(user_query))\n","\n","relay_words, candidate_words = search(sentence, user_query)\n","print(\"relay_words: \", relay_words)\n","print(\"candidate_words: \", candidate_words)\n"],"execution_count":13,"outputs":[{"output_type":"stream","text":["\n","# user_query = 芝刈り\n","# 係り受け先(子ノード)\n","relay_words:  ['行き', '芝刈り', '川', '洗濯', '山']\n","candidate_words:  ['お爺さん', 'お婆さん']\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"TIIa8cBsK3BQ"},"source":["## 固有表現"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"z4MC0mD_KeTX","executionInfo":{"status":"ok","timestamp":1618381273792,"user_tz":-540,"elapsed":103919,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"f2853f65-1c32-4913-e921-cff2411607ae"},"source":["print(\"----固有表現----\")\n","doc = nlp(sentence)\n","print(\"固有表現,開始index,終了index,ラベル\")\n","for entity in doc.ents:\n","    print(entity.text, entity.start_char, entity.end_char, entity.label_)\n"],"execution_count":14,"outputs":[{"output_type":"stream","text":["----固有表現----\n","固有表現,開始index,終了index,ラベル\n","芝刈り 7 10 GOE_Other\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"uxYvY-li-cYJ","executionInfo":{"status":"ok","timestamp":1618381273792,"user_tz":-540,"elapsed":103907,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"74931b57-0909-457c-a69f-624df1a29daf"},"source":["!date"],"execution_count":15,"outputs":[{"output_type":"stream","text":["Wed Apr 14 06:21:12 UTC 2021\n"],"name":"stdout"}]}]}