パスワードを忘れた? アカウント作成
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向けで無くてもいいから、公開してくれないかなぁ。

この議論は、yasuoka (21275)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

日本発のオープンソースソフトウェアは42件 -- ある官僚

読み込み中...