0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonで日本語文の中の生物の学名を抜き出す

Last updated at Posted at 2021-09-06

(追記)コメント欄で以下よりシンプルな書き方を教えていただきました。

モチベーション

生物の学名は斜体で書くという決まりがあります。Wordに文章を打ち込んでいる時に、いちいち学名を手作業で斜体にするのが面倒なので、自動化したいです。そのための第一歩としてPythonで学名を抜き出してみます。
ちなみにPython 学名で検索するとニシキヘビ(Python)の情報が出てきます。

学名を抜き出す

日本語文の中に半角英字で学名が書かれていることを想定。例文はWikipediaの「クラミドモナス」より取りました。

Python
text = "クラミドモナス(Chlamydomonas)は緑藻綱クラミドモナス目(もしくはオオヒゲマワリ目)に属する単細胞の鞭毛虫からなる属である。"\
            "500種以上が知られているが、単にクラミドモナスと言えば、モデル生物として盛んに利用されている"\
            "コナミドリムシ(Chlamydomonas reinhardtii)を指すことが多い。"\
            "C. reinhardtii は分子生物学、特に鞭毛の運動や葉緑体の動力学、発生生物学、遺伝学の研究のモデル生物である。"\
            "チャンネルロドプシンのような、光感受性のイオンチャネルを持っていることは、クラミドモナスの特筆すべき性質の一つである。"\
            "「ウォーターメロン・スノー」として知られる、雪山がピンク色(あるいは赤色)に染まる現象は、同属の C. nivalis のしわざである。"

スクリーンショット 2021-09-06 21.45.05.png

文章の中に出てくる学名には3パターンあります(上の文章はすべてのパターンを網羅しています)。

  1. 属名のみ 例:Chlamydomonas
  2. 属名+種小名 例:Chlamydomonas reinhardtii
  3. 属名の頭文字+種小名 例:C. reinhardtii

属名の頭文字は大文字、種小名はすべて小文字です。
英語など、ラテンアルファベットで記述される言語の文章から学名を抜き出すのはそれなりに面倒そうですが、日本語文からなら正規表現で半角英字を探せばできそうです(まさか全角で学名を書く生物学者はいないでしょう)。ということで、やりました。正規表現弱者なので、もっとエレガントな書き方があるよという人は教えてください。

Python
import re
result = re.findall(r"[A-Z][a-z]+ [a-z]+|[A-Z][a-z]+|[A-Z]\. [a-z]+", text)
print(result)

スクリーンショット 2021-09-06 21.52.04.png
とりあえず全部抜き出せたようです。
正規表現の|(OR)前後の順番を変えるとうまくいきませんでした。

Python
result = re.findall(r" A | B | C ", text)

となっている時に、A, B, Cの順番で探すものと思われます。
上のコードでは、「属名+種小名|属名のみ|属名の頭文字+種小名」の順番で探しています。「属名のみ|属名+種小名|属名の頭文字+種小名」とすると、「属名+種小名」がうまく探せませんでした。

参考

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?