• 締切済み

文章の並べ替えと置換について

The AAA of claim 1, wherein said BBB are CCC. AAAは英語で、日本語は甲とします。 BBBは英語で、日本語は乙とします。 CCCは英語で、日本語は丙とします。 上記英文を、 「前記乙が、丙である、請求項1に記載の甲。」 という日本語に置換したい場合、 数字の部分は、一桁または二桁の半角の数字であり、 単数複数があるため、CCCの直前はisまたはareであるとします。 どのように記述すればよいでしょうか? なお、Perlの正規表現を前提とします。 変換対象:(.+)(AAA of claims?)([1-9][0-9]|[1-9])(\,)(.+)(said BBB)(are|is)(CCC)(\.)       /1 /2 /3 /4 /5 /6 /7 /8 /9 /1~/9は該当するタグです。 返還式 :前記/6が、/8である、請求項/3に記載の/2。 変換後(期待):前記乙が、丙である、請求項1に記載の甲 ではうまくいかないようです。 ホントの初心者です。 どうぞ、よろしくお願いします。

みんなの回答

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.2

特段、難しいPerlの構文を用いてるわけではないので、検索方法をお教えします。 my %japanese_of = ( AAA => '甲', BBB => '乙', CCC => '丙' ); ↑これは、ハッシュ変数の宣言と、それへの代入の基本構文です。 「perl ハッシュ」で検索すれば説明サイトがヒットすると思います。 $sentence =~ /.*?([a-zA-Z]+) of claim ([1-9][0-9]?), wherein said ([a-zA-Z]+) (?:is|are) ([a-zA-Z]+)\./; $japanese = "前記$japanese_of{$3}が、$japanese_of{$4}である、請求項$2に記載の$japanese_of{$1}"; ↑これは、正規表現と後方参照を利用しています。 「perl 正規表現 後方参照」で検索すれば説明サイトがヒットすると思います。 あと、「perl 文字列 変数展開」を検索すれば、下のコードの意味がより分かる と思います。 それでも、分からないところがあれば指摘してください。

rider2009
質問者

お礼

ありがとうございます。 もうちょっと勉強してみます。

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.1

質問者さんの意図をきちんと把握しているのかが心配ですが、、、 こんな感じではない? my $sentence = 'The AAA of claim 1, wherein said BBB are CCC.'; my %japanese_of = ( AAA => '甲', BBB => '乙', CCC => '丙' ); $sentence =~ /.*?([a-zA-Z]+) of claim ([1-9][0-9]?), wherein said ([a-zA-Z]+) (?:is|are) ([a-zA-Z]+)\./; $japanese = "前記$japanese_of{$3}が、$japanese_of{$4}である、請求項$2に記載の$japanese_of{$1}"; print $japanese; #=> 前記乙が、丙である、請求項1に記載の甲

rider2009
質問者

補足

ありがとうございます。 正直、回答いただいた式が呪文のようで よく理解できないところがあります。 なぜ、こうなるのか説明していただけないでしょうか? 急ぎませんので。。。すいません。 あと、 途中でタグ化する部分は、アルファベットとは 限りません。