スタック・オーバーフロー Asked on September 1, 2021
文中の動詞を全て過去形にしたいです。
具体的には以下の入力をして、出力を得るイメージです。
As she leaves the kitchen, his voice follows her.
#出力
As she left the kitchen, his voice followed her.
自然言語処理のライブラリを使って、現在形にできることは分かったのですが、過去形にするライブラリや方法がわからず困っています。
以下の方法で、過去形の動詞を現在形(主語による変形は考慮しない)にできることは、試しました。
自然言語処理ライブラリspacyのサイトを参考に以下のプログラムを作成しました。
text = "As she left the kitchen, his voice followed her."
doc_dep = nlp(text)
for i in range(len(doc_dep)):
token = doc_dep[i]
#print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_)
if token.pos_== 'VERB':
print(token.text)
print(token.lemma_)
text = text.replace(token.text, token.lemma_)
print(text)
#出力
'As she leave the kitchen, his voice follow her.'
Python 3.7.0
spaCy version 2.3.1
pattern.enのconjugate
を使えば任意の時制や人称に変換できます。
pattern
のインストールgit clone -b development https://github.com/clips/pattern
cd pattern
python setup.py install
※Windowsの場合は管理者権限のコンソールで実行してください。
from pattern.en import tag, conjugate, PAST, PRESENT, SINGULAR
raw = "OK, I see that she saw sea and I'm not sea."
tags = tag(raw)
print(tags) #[('OK', 'UH'), (',', ','), ('I', 'PRP'), ('see', 'VBP'), ('that', 'IN'), ('she', 'PRP'), ('saw', 'VBD'), ('sea', 'NN'), ('and', 'CC'), ('I', 'PRP'), ("'m", 'VBP'), ('not', 'RB'), ('sea', 'NN'), ('.', '.')]
text = ""
for t in tags:
s = t[0]
if t[1] == "VBP":
s = conjugate(s, tense=PAST)
#三単現に置換する場合
#if "VB" in t[1]:
# s = conjugate(s, tense=PRESENT, person=3, number=SINGULAR)
if not(s in ',.'):
s = ' ' + s
text += s
print(text.strip()) # OK, I saw that she saw sea and I was not sea.
#三単現に置換した場合 OK, I sees that she sees sea and I is not sea.
import spacy
from pattern.en import conjugate, PAST
nlp = spacy.load('en')
text = "OK, I see that she saw sea and I'm not sea."
doc_dep = nlp(text)
for i in range(len(doc_dep)):
token = doc_dep[i]
if token.pos_== 'VERB':
text = text.replace(token.text, conjugate(token.text, tense=PAST))
print(text) # OK, I saw that she saw sea and I'm not sea. (※"I'm"が置換されていない)
conjugate
の引数は本家SOの類似回答が詳しいです。
なおPyPIに入っているpattern
やpattern3
はメンテナンスが滞っているようで、手元のPython 3.7.2 でpip install
してもエラーになりました。
Correct answer by payaneco on September 1, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP