パスワードを忘れた? アカウント作成

zenkakueisuujiさんのトモダチの日記。 Idle.srad.jpは、あなたの人生において完全な時間の浪費です。見るなよ、見るなよ。

14026509 journal
人工知能

yasuokaの日記: Montague形式意味論とМельчук依存文法は、どちらが漢文の自動解析に向いているか

日記 by yasuoka

11月17日(日)の日本言語学会第159回大会で、公開シンポジウム「AIによって揺さぶられる言語理論 ―意味論の観点から―」が開かれる、というのをお教えいただいた。

形式意味論は、モンタギュー以来、論理学を中心とする言語分析を推し進め、あたかもそれが意味の研究であり、また研究の結果はAIなどの隣接分野の研究に直接寄与するはずだという素朴な信念のもとに研究が進められてきた。しかしながら、最近のAIの研究、とくにディープラーニングの登場により、意味論ひいては言語理論は大きく揺さぶられている。場合によっては論理学による分析は不要となるだけでなく、従来の言語理論では扱えないような人間のことばの側面が、視覚や学習が高度化したAIの世界で扱われ発展する可能性があるからである。AIの世界における「意味」とは何を指すのか。言語理論はAIを下支えするような理論やアイデアを提供できるのか。そういった問題をフロアからのご意見も交え、活発に議論したい。

うー、行きたい。というのも、私(安岡孝一)個人の感触としても、Richard Merritt Montagueの形式意味論はイマイチで、少なくとも古典中国語(漢文)の自動解析には使えなさそうなのだ。じゃあ、言語理論全般が使えないかというと全くそんなことは無くて、たとえば、Игорь Александрович Мельчукの依存文法は、古典中国語の自動解析において、かなり強力なツールだったりする。実際、私自身、Мельчукの依存文法(を現代的にしたUniversal Dependencies)をAIにブチ込んで、漢文訓読の返り点を自動で打ったりするわけだ(cf.『漢文の依存文法解析と返り点の関係について』)。

なので、「意味論ひいては言語理論は大きく揺さぶられている」というのは、私から見るとちょっと大袈裟で、言語理論の中にも使えるものもあれば使えないものもある、というアタリマエの辺りに落ち着く気がするのだ。まあ、その辺が「場合によっては」に込められているのかもしれないが、それにしても、うー、行きたい。

14024851 journal
人工知能

yasuokaの日記: GiNZA v2.2.0で読む『吾輩は猫である』

日記 by yasuoka

日本語係り受け解析エンジンGiNZAのv2.2.0がリリースされていたので、使ってみることにした。まずはインストール、と言いたいところだが、旧版をアンインストールしてからでないと、うまくインストールできないようだ。

% pip3 uninstall ginza ja-ginza ja-ginza-nopn SudachiPy SudachiDict-core
% pip3 install https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz

インストールがうまくいったら、7月8日の日記と同様、言語処理100本ノック2015の『吾輩は猫である』から、「ヴァイオリンを始める」文をGiNZAで探してみよう。

% python3
>>> import spacy,urllib.request
>>> ja=spacy.load("ja_ginza")
>>> with urllib.request.urlopen("http://www.cl.ecei.tohoku.ac.jp/nlp100/data/neko.txt") as r:
...   q=r.read()
...
>>> u=ja(q.decode("utf-8"))
>>> s=set(w.sent for w in u if w.lemma_=="バイオリン" and w.dep_=="obj" and w.head.lemma_=="始める")
>>> print(s)
{「君はヴァイオリンをいつ頃から始めたのかい。}
>>> import sys
>>> from ginza.command_line import print_conllu
>>> for t in s:
...   print_conllu(t,True,sys.stdout)
...

# text = 「君はヴァイオリンをいつ頃から始めたのかい。
180715    「    「    PUNCT    補助記号-括弧開    _    180716    punct    _    BunsetuBILabel=B|BunsetuPositionType=CONT|SpaceAfter=No
180716    君    君    PRON    代名詞    _    180722    nsubj    _    BunsetuBILabel=I|BunsetuPositionType=SEM_HEAD|SpaceAfter=No|NE=PRODUCT_B
180717    は    は    ADP    助詞-係助詞    _    180716    case    _    BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|SpaceAfter=No|NE=PRODUCT_I
180718    ヴァイオリン    バイオリン    NOUN    名詞-普通名詞-一般    _    180722    obj    _    BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|SpaceAfter=No|NE=PRODUCT_I
180719    を    を    ADP    助詞-格助詞    _    180718    case    _    BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|SpaceAfter=No
180720    いつ頃    いつ頃    NOUN    名詞-普通名詞-副詞可能    _    180722    nmod    _    BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|SpaceAfter=No
180721    から    から    ADP    助詞-格助詞    _    180720    case    _    BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|SpaceAfter=No
180722    始め    始める    VERB    動詞-非自立可能    _    180726    advcl    _    BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|SpaceAfter=No
180723    た    た    AUX    助動詞    _    180722    aux    _    BunsetuBILabel=I|BunsetuPositionType=FUNC|SpaceAfter=No
180724    の    の    SCONJ    助詞-準体助詞    _    180722    mark    _    BunsetuBILabel=I|BunsetuPositionType=FUNC|SpaceAfter=No
180725    か    か    PART    助詞-終助詞    _    180722    aux    _    BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|SpaceAfter=No
180726    い    い    PART    助詞-終助詞    _    0    root    _    BunsetuBILabel=B|BunsetuPositionType=ROOT|SpaceAfter=No
180727    。    。    PUNCT    補助記号-句点    _    180726    punct    _    BunsetuBILabel=I|BunsetuPositionType=CONT

GiNZAにprint_conlluという関数が導入されたので、Universal Dependenciesの出力が非常に簡単になった。解析精度も上がっているようなので、ぜひ試してみてほしい。

14023910 journal
人工知能

yasuokaの日記: 東洋経済の考える「AIに負けない読解力」 6

日記 by yasuoka

ネットサーフィンしていたところ、東洋経済のサイトで「リーディングスキルテスト(RST)の問題を解いてみよう」(2019年10月12日号、pp.44-53)という記事に出くわした。係り受け解析のネタになるかな、と思って、順に問題を見ていったが、Q.2がいきなり以下の内容で、さすがに頭が痛くなった。

Q.2 以下の文を読みなさい。
真核細胞の呼吸の材料となる有機物は主にグルコースで、細胞に取り込まれると、ミトコンドリアの酵素などによって分解反応が進み、無機物に分解される。
この文脈において、以下の文中の空欄に当てはまる最も適当なものを選択肢のうちから1つ選びなさい。
・(     )は細胞内で分解される。
① ミトコンドリア ② グルコース ③ 真核細胞 ④ 無機物

いや、それ「この文脈において」とか言われても、「解糖系がミトコンドリアの外膜の外でおこなわれる」っていう高校の生物で習う内容に反している。いくら「酵素など」と書いたところで、この「など」が「酵素」に係っているのか、それとも「ミトコンドリアの酵素」に係っているのかが曖昧で、そもそも意味がない。というか、この部分が「ミトコンドリアの」という限定を含んでいる以上、少なくともエムデン・マイヤーホフ経路の酵素は除外しているわけで、だとすると解糖系は無視されていると考えられる。そうすると、文の内容がそもそも間違っていて、しかも、選択肢に「ピルビン酸」も「アセチルCoA」も含まれてないのだから、答えられないのは当然だろう。

RSTは「さまざまな分野の、事実について書かれている短い文章を正確に読めるかどうか」の能力を7項目の異なる観点から判断するものだ。

いや、これ「事実について書かれている」わけじゃないから。こんなの「正確に読める」わけがないと、私(安岡孝一)個人は思うのだが、それとも東洋経済の「AI」は「正確に読める」のかしら。

14023453 journal
教育

yasuokaの日記: 漢文訓読に『訓民正音』は必要か

日記 by yasuoka

ネットサーフィンしていたところ、川端祐一郎の「漢文訓読は単なる技術ではない」(表現者criterionメールマガジン、2019年10月10日)という記事に行き当たった。漢文(古典中国語)と高校教育の間の考察が甘く、私(安岡孝一)個人としては、かなり閉口する記事だったのだが、それよりも気になったのが、文章の最初に「茶さじ」と『訓民正音』の画像が貼り付けてあることだった。10月9日が「ハングルの日」だったので、あえて『訓民正音』なのだろうか。でも、たとえば、この画像に見える「붇為筆而其聲入」って、「붇」の音の説明なので、いくらなんでも漢文訓読するのは難しいと思うのだ。

そんな感じの記事だったので、内容に立ち入る以前に、そもそも記事としてワケがわからない、というのが正直なところだ。ちなみに私個人としては、現代の高校の漢文教育という局面においては、漢文訓読は、もはや「単なる技術」と考えざるを得ないと思う。このあたりについては、以前「書写言語の情報処理から見た高校における漢文教育」で、ざっと書いておいたので、よければ読んでほしい。

14022983 journal
人工知能

yasuokaの日記: AIを用いた漢文の文法解析

日記 by yasuoka

今日の日本中国学会で話す予定だった「AIを用いた漢文の文法解析」が、台風19号で流れてしまった。台風なので仕方ないのだけど、私(安岡孝一)が話す心算だった内容を、かいつまんで日記に残しておこうと思う。

漢文(古典中国語)の文法解析を考えた場合、私個人としては、形態素解析→依存文法解析→直接構成鎖解析→談話構造解析、という感じの段階を踏んでいくことになるだろう、と睨んでいる。これらのうち、形態素解析については『古典中国語(漢文)の形態素解析とその応用』でも示したとおり、MeCabを用いる手法が実用化できていて、あるいは他の解析エンジンを使うにしても、Conditional Random Fieldsで単語切りと品詞付与を同時におこなう、というのが有効なようである。次に、依存文法解析については『四書を学んだMeCab+UDPipeはセンター試験の漢文を読めるのか』でも示したとおり、UDPipeを用いる手法が係り受け解析については精度が良くて、Universal DependenciesをNeural Network Classifier (Oracle付きがいいようだ)にぶち込むのが、漢文の動賓構造の自動抽出に効くのは間違いなさそうだ。ただ、実は私自身は、UDPipeで文切りまで出来るだろう、と軽く考えていたのだが、正直そのあたりは、まだまだ難しい。

一方、直接構成鎖解析については『Universal Dependenciesの拡張にもとづく古典中国語(漢文)の直接構成鎖解析の試み』でも示したとおり、まだ「試み」に過ぎなくて、なかなか実用化は難しそうだ。そんなわけなので、その次の談話構造解析については、まだ、研究の端緒についたところだったりする。まあ、それでも、とりあえず形態素解析と依存文法解析については、udkanbunでpython3パッケージにしたので、日本中国学会の皆さんも、ぜひ使ってみてほしい。あるいはpython3をインストールするのが面倒な人は、「UDPipe Visualizer with Immediate Catena Tree」で形態素解析→依存文法解析→直接構成鎖解析(ただし実装としては、まだ甘い)の実際をWWW公開しているので、色々な文で試してみてほしい。

という感じの内容を「招待講演」で話して、日本中国学会の方々の反応を知りたいなぁ、と思っていたのだけど、台風19号で流れてしまった。台風なので仕方ないのだけど、返す返すも残念だ。

14018429 journal
人工知能

yasuokaの日記: Re:「It values, instead, its good men.」のitsは、itとsに分かれるのか

日記 by yasuoka

私(安岡孝一)の昨日の日記で書いた「It values, instead, its good men.」だが、UDPipeにもenglish-ewt-ud-2.4モデルがあることを思い出したので、UniDic2UD経由で試して見た。

% python3
>>> import unidic2ud
>>> en=unidic2ud.load(UniDic=None,UDPipe="english-ewt")
>>> s=en("It values, instead, its good men.")
>>> print(s)
# sent_id = 1
# text = It values, instead, its good men.
1    It    it    PRON    PRP    Case=Nom|Gender=Neut|Number=Sing|Person=3|PronType=Prs    2    nsubj    _    _
2    values    value    VERB    VBZ    Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin    0    root    _    SpaceAfter=No
3    ,    ,    PUNCT    ,    _    2    punct    _    _
4    instead    instead    ADV    RB    _    2    advmod    _    SpaceAfter=No
5    ,    ,    PUNCT    ,    _    2    punct    _    _
6    it    it    PRON    PRP    Case=Nom|Gender=Neut|Number=Sing|Person=3|PronType=Prs    9    nsubj    _    SpaceAfter=No
7    s    be    AUX    VBZ    Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin    9    cop    _    _
8    good    good    ADJ    JJ    Degree=Pos    9    amod    _    _
9    men    man    NOUN    NNS    Number=Plur    2    parataxis    _    SpaceAfter=No
10    .    .    PUNCT    .    _    2    punct    _    SpaceAfter=No

「CoNLL-U SVG Editor」で可視化すると、こんな感じ。やはり「its」が「it」と「s」に分かれてしまっていて、かなり気持ち悪い。一方、UDPipeのenglish-gum-ud-2.4モデルだと、以下のようになった。

% python3
>>> import unidic2ud
>>> eng=unidic2ud.load(UniDic=None,UDPipe="english-gum")
>>> s=eng("It values, instead, its good men.")
>>> print(s)
# sent_id = 1
# text = It values, instead, its good men.
1    It    it    PRON    PRP    Case=Nom|Gender=Neut|Number=Sing|Person=3|PronType=Prs    2    nsubj    _    _
2    values    value    VERB    VBZ    Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin    0    root    _    SpaceAfter=No
3    ,    ,    PUNCT    ,    _    4    punct    _    _
4    instead    instead    ADV    RB    _    2    advmod    _    SpaceAfter=No
5    ,    ,    PUNCT    ,    _    8    punct    _    _
6    its    its    PRON    PRP$    Gender=Neut|Number=Sing|Person=3|Poss=Yes|PronType=Prs    8    nmod:poss    _    _
7    good    good    ADJ    JJ    Degree=Pos    8    amod    _    _
8    men    man    NOUN    NNS    Number=Plur    2    obj    _    SpaceAfter=No
9    .    .    PUNCT    .    _    2    punct    _    SpaceAfter=No

「CoNLL-U SVG Editor」で可視化すると、こんな感じ。どう考えても、EWTモデルの方に問題があるようだ。EWTモデルは、元々、インターネットで拾い集めてきた英文の係り受けコーパスなので、「its」を「it's」と混同するくらいは当たり前の世界なのだろう。さて、このあたり、どうしたものかな。

14017381 journal
アメリカ合衆国

yasuokaの日記: 「It values, instead, its good men.」のitsは、itとsに分かれるのか

日記 by yasuoka

StanfordNLPのen_ewtモデル0.2.0で、James Leggeの『大學』を係り受け解析していたところ、「It values, instead, its good men.」という文で、妙な結果が出ていることに気づいた。

% python3
>>> import stanfordnlp
>>> en=stanfordnlp.Pipeline(lang="en",treebank="en_ewt")
>>> s=en("It values, instead, its good men.")
>>> print(s.conll_file.conll_as_string())
1    It    it    PRON    PRP    Case=Nom|Gender=Neut|Number=Sing|Person=3|PronType=Prs    2    nsubj    _    _
2    values    value    VERB    VBZ    Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin    0    root    _    _
3    ,    ,    PUNCT    ,    _    2    punct    _    _
4    instead    instead    ADV    RB    _    9    advmod    _    _
5    ,    ,    PUNCT    ,    _    9    punct    _    _
6    it    it    PRON    PRP    Case=Nom|Gender=Neut|Number=Sing|Person=3|PronType=Prs    9    nsubj    _    _
7    s    be    AUX    VBZ    Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin    9    cop    _    _
8    good    good    ADJ    JJ    Degree=Pos    9    amod    _    _
9    men    man    NOUN    NNS    Number=Plur    2    ccomp    _    _
10    .    .    PUNCT    .    _    2    punct    _    _

「CoNLL-U SVG Editor」で可視化してみると、こんな感じ。「its」が「it」と「s」に分かれてしまっている。どうも「its」を「it's」と勘違いしていて、その結果、ワケの分からない解析結果になっているようだ。StanfordNLPの英語モデルには、en_gumモデル0.2.0もあるので、ちょっと比較してみよう。

% python3
>>> import stanfordnlp
>>> eng=stanfordnlp.Pipeline(lang="en",treebank="en_gum")
>>> s=eng("It values, instead, its good men.")
>>> print(s.conll_file.conll_as_string())
1    It    it    PRON    PRP    Case=Nom|Gender=Neut|Number=Sing|Person=3|PronType=Prs    2    nsubj    _    _
2    values    value    VERB    VBZ    Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin    0    root    _    _
3    ,    ,    PUNCT    ,    _    8    punct    _    _
4    instead    instead    ADV    RB    _    8    advmod    _    _
5    ,    ,    PUNCT    ,    _    4    punct    _    _
6    its    its    PRON    PRP$    Gender=Neut|Number=Sing|Person=3|Poss=Yes|PronType=Prs    8    nmod:poss    _    _
7    good    good    ADJ    JJ    Degree=Pos    8    amod    _    _
8    men    man    NOUN    NNS    Number=Plur    2    obj    _    _
9    .    .    PUNCT    .    _    2    punct    _    _

「CoNLL-U SVG Editor」で可視化してみると、こんな感じ。まあまあイイ感じに解析できている。だとすると、StanfordNLPの問題というよりは、言語モデルen_ewtの方の問題なのだろうけど、さて、こういうの、どうしたらいいんだろ?

14009458 journal
人工知能

yasuokaの日記: 古詩文斷句APIのためのpython3ラッパー

日記 by yasuoka

私(安岡孝一)の一昨々日の日記で紹介した「古詩文斷句」を、python3から使うためのAPIラッパーを書いてみた。というのも、Webの「古詩文斷句」は300字制限があって、長い章を文切りするには難があるからだ。

#! /usr/bin/python3 -i

class SegShenShen(object):
  def __init__(self):
    self.shenURL="https://seg.shenshen.wiki"
    self.apiURL=self.shenURL+"/api.php"
    self.header={"Content-Type":"application/x-www-form-urlencoded","Referer":self.shenURL,"User-Agent":"Mozilla 5.0 (SegShenShen)"}
  def __call__(self,paragraph):
    import re
    from urllib.parse import quote
    import urllib.request as req
    p=paragraph.replace("\n","")
    s=""
    while p>"":
      d='text={"text":"'+quote(p)+'"}&seg=quan'
      u=req.Request(self.apiURL,d.encode(),self.header)
      r=req.urlopen(u)
      q=r.read()
      r.close()
      q=re.sub(r'<span[^>]*> [^ ]+ </span>',"\n",q.decode("utf-8"))
      if len(p)==len(q.replace("\n","")):
        s+=q
        p=""
      else:
        q=q[0:q.rindex("\n",0,q.rindex("\n",0,q.rindex("\n")-1)-1)+1]
        s+=q
        p=p[len(q.replace("\n","")):]
    return s

上のプログラムを「SegShenShen.py」に保存したら、とりあえず「四面楚歌」のあたりを文切りしてみよう。

% python3 -i SegShenShen.py
>>> seg=SegShenShen()
>>> s=seg("五年王追羽至固陵韓信彭越期不至張良勸王以楚地梁地許兩人王從之皆引兵來黥布亦會羽至垓下兵少食盡信等乘之羽敗入壁圍之數重羽夜聞漢軍四面皆楚歌大驚曰漢皆已得楚乎何楚人多也起飮帳中命虞美人起舞悲歌慷慨泣數行下其歌曰力拔山兮氣蓋世時不利兮騅不逝騅不逝兮可奈何虞兮虞兮奈若何騅者羽平日所乘駿馬也左右皆泣莫敢仰視羽乃夜從八百餘騎潰圍南出渡淮迷失道陷大澤中漢追及之至東城乃有二十八騎羽謂其騎曰吾起兵八歲七十餘戰未嘗敗也今卒困此此天亡我非戰之罪今日固決死願爲諸君決戰必潰圍斬將令諸君知之皆如其言於是欲東渡烏江亭長艤船待曰江東雖小亦足以王願急渡羽曰籍與江東子弟八千人渡江而西今無一人還縱江東父兄憐而王我我何面目復見獨不愧於心乎乃刎而死楚地悉定獨魯不下王欲屠之至城下猶聞弦誦之聲爲其守禮義之國爲主死節持羽頭示之乃降王還馳入齊王信壁奪其軍立信爲楚王彭越爲梁王漢王卽皇帝位")
>>> print(s)
五年
王追羽至固陵
韓信
彭越期不至
張良勸王以楚地
梁地許兩人
王從之
皆引兵來
黥布亦會羽至垓下
兵少食盡
信等乘之
羽敗入壁
圍之數重
羽夜聞漢軍四面皆楚歌
大驚曰
漢皆已得楚乎
何楚人多也
起飮帳中
命虞美人起舞
悲歌慷慨
泣數行下
其歌曰
力拔山兮氣蓋世
時不利兮騅不逝
騅不逝兮可奈何
虞兮虞兮奈若何
騅者
羽平日所乘駿馬也
左右皆泣
莫敢仰視
羽乃夜從八百餘騎
潰圍南出
渡淮
迷失道
陷大澤中
漢追及之
至東城
乃有二十八騎
羽謂其騎曰
吾起兵八歲
七十餘戰未嘗敗也
今卒困此
此天亡我
非戰之罪
今日固決死
願爲諸君決戰
必潰圍斬將
令諸君知之
皆如其言
於是欲東渡烏江
亭長艤船待曰
江東雖小
亦足以王
願急渡
羽曰
籍與江東子弟八千人渡江而西
今無一人還
縱江東父兄憐而王我
我何面目復見
獨不愧於心乎
乃刎而死
楚地悉定
獨魯不下
王欲屠之
至城下
猶聞弦誦之聲
爲其守禮義之國
爲主死節
持羽頭示之
乃降
王還
馳入齊王信壁
奪其軍
立信爲楚王
彭越爲梁王
漢王卽皇帝位

「韓信彭越期不至」や「張良勸王以楚地梁地許兩人」が、名詞が連続するところで泣き別れているのが気になるものの、まあまあ良い文切りだと思う。古典中国語(漢文)の文切りが完璧になれば、udkanbunと組み合わせて

% python3 -i SegShenShen.py
>>> seg=SegShenShen()
>>> import udkanbun
>>> lzh=udkanbun.load()
>>> u=lzh(seg("五年王追羽至固陵韓信彭越期不至張良勸王以楚地梁地許兩人王從之皆引兵來黥布亦會羽至垓下兵少食盡信等乘之羽敗入壁圍之數重羽夜聞漢軍四面皆楚歌大驚曰漢皆已得楚乎何楚人多也起飮帳中命虞美人起舞悲歌慷慨泣數行下其歌曰力拔山兮氣蓋世時不利兮騅不逝騅不逝兮可奈何虞兮虞兮奈若何騅者羽平日所乘駿馬也左右皆泣莫敢仰視羽乃夜從八百餘騎潰圍南出渡淮迷失道陷大澤中漢追及之至東城乃有二十八騎羽謂其騎曰吾起兵八歲七十餘戰未嘗敗也今卒困此此天亡我非戰之罪今日固決死願爲諸君決戰必潰圍斬將令諸君知之皆如其言於是欲東渡烏江亭長艤船待曰江東雖小亦足以王願急渡羽曰籍與江東子弟八千人渡江而西今無一人還縱江東父兄憐而王我我何面目復見獨不愧於心乎乃刎而死楚地悉定獨魯不下王欲屠之至城下猶聞弦誦之聲爲其守禮義之國爲主死節持羽頭示之乃降王還馳入齊王信壁奪其軍立信爲楚王彭越爲梁王漢王卽皇帝位"))
>>> print(u)

のように、文切りと形態素解析と係り受け解析を一度に出来るはずだ。「古詩文斷句」の言語モデル、python向けで無くてもいいから、公開してくれないかなぁ。

14008990 journal
日本

yasuokaの日記: 32ビットCygwin向けmecab-cygwin32

日記 by yasuoka

昨日の日記の続きだが、UniDic2UDを32ビットCygwinでも動かせないか頑張ってみたところ、MeCabもろとも何とか出来てしまった。ただし、gcc-g++gitpython37-pippython37-develswigが必要で、その代わりインストールは

$ pip3.7 install git+https://github.com/KoichiYasuoka/mecab-cygwin32
$ pip3.7 install unidic2ud

でOKである。辞書や言語モデルのダウンロードも可能で、たとえば現代書き言葉UniDicのダウンロードは

$ python3.7 -m unidic2ud download.unidic gendai

で可能となる。ちなみに、辞書や言語モデルのダウンロード先は/usr/lib/python3.7/site-packages/unidic2ud/downloadの中なので、文字コードがUTF-8なら

$ echo 望遠鏡で泳ぐ彼女を見た | mecab -d /usr/lib/python3*/site-packages/unidic2ud/download/gendai

という使い方も可能だが、一応UniDic2UDのためのダウンロードなので

$ python3.7
>>> import unidic2ud
>>> ja=unidic2ud.load("gendai")
>>> s=ja("望遠鏡で泳ぐ彼女を見た")
>>> print(s)

がオススメだ。UniDicを使ってみたいが、手元にWindows 7/8しか無い人は、ぜひ試してみてほしい。

14008486 journal
人工知能

yasuokaの日記: UD-KanbunとUniDic2UDをCygwinで使うためのmecab-cygwin64

日記 by yasuoka

古典中国語(漢文)向け係り受け解析エンジンUD-Kanbunを、Cygwinで使えるようにできないか、との御相談を受けたので、私(安岡孝一)なりに何とか戦ってみた。何とかなるにはなったのだが、64ビット版Cygwinでpython37-pippython37-develが必要なだけでなく、gcc-g++gitswigもCygwin64に入れておく必要がある、という物凄い事態になってしまった。インストールもちょっと手間で

$ cd /tmp
$ git clone https://github.com/KoichiYasuoka/mecab-cygwin64.git
$ cd mecab-cygwin64
$ sh -x ./install.sh /usr/local
$ pip3.7 install udkanbun

という手順が必要だったりする。ただ、この結果mecabもインストールされてしまうので

$ echo 望遠鏡で泳ぐ彼女を見た | mecab
望遠鏡  名詞,一般,*,*,*,*,望遠鏡,ボウエンキョウ,ボーエンキョー
で      助詞,格助詞,一般,*,*,*,で,デ,デ
泳ぐ    動詞,自立,*,*,五段・ガ行,基本形,泳ぐ,オヨグ,オヨグ
彼女    名詞,代名詞,一般,*,*,*,彼女,カノジョ,カノジョ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見      動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
EOS

がCygwin64で動いてしまう。もちろんudkanbunもインストールされるので

$ echo 不入虎穴不得虎子 | udkanbun
# text = 不入虎穴不得虎子
1       不      不      ADV     v,副詞,否定,無界        Polarity=Neg    2      advmod   _       Gloss=not|SpaceAfter=No
2       入      入      VERB    v,動詞,行為,移動        _       0       root   _Gloss=enter|SpaceAfter=No
3       虎      虎      NOUN    n,名詞,主体,動物        _       4       nmod   _Gloss=tiger|SpaceAfter=No
4       穴      穴      NOUN    n,名詞,固定物,地形      Case=Loc        2      obj      _       Gloss=cave|SpaceAfter=No
5       不      不      ADV     v,副詞,否定,無界        Polarity=Neg    6      advmod   _       Gloss=not|SpaceAfter=No
6       得      得      VERB    v,動詞,行為,得失        _       2       parataxis       _       Gloss=get|SpaceAfter=No
7       虎      虎      NOUN    n,名詞,主体,動物        _       8       nmod   _Gloss=tiger|SpaceAfter=No
8       子      子      NOUN    n,名詞,人,関係  _       6       obj     _      Gloss=child|SpaceAfter=No

がCygwin64で動作するはずである。ちなみに、ここまでが動いたら、日本語向け係り受け解析エンジンUniDic2UD

$ pip3.7 install unidic2ud

でCygwin64にインストールできるはずなので、ぜひ試してみてほしい。

typodupeerror

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

読み込み中...