私があなたの質問にコメントしたように: まず、ある種の文法を定義する必要があると思います。たとえば、単純な割り当てステートメント: The <variable> is <value>.
. 最初の行の小さな例を作成しました。次の行でも同じことができます。
import re
def reducer(text): # Catch statements and add them to a dictionary
catched = dict()
for v, k in re.findall(r'The\s(?P<variable>\w+)\sis\s(?P<value>\w+)', text):
try:
catched[k].append(v)
except KeyError:
catched[k] = [v]
return catched
def comma_and(ls): # Create human-like enumeration with words
output = [ls[0]]
for i in xrange(1, len(ls)):
output.append('%s%s' % (' and ' if i == len(ls) - 1 else ', ', ls[i]))
return ''.join(output)
def rephrase(text): # Rephrase separated statements into one sentence
stmnts = reducer(text)
part1 = str()
part2 = str()
for key in stmnts:
if len(stmnts[key]) <= 1:
part2 = 'but the {variable} is {value}.'.format(
variable=stmnts[key][0], value=key)
else:
part1 = 'The {variables} are {value}'.format(
variables=comma_and(stmnts[key]), value=key)
print part1 + ' ' + part2
デモ:
rephraser('The Toyota is red. The Honda is red. The BMW is red. The Mercedes is green.')
出力は次のとおりです。
# The Toyota, Honda and BMW are red but the Mercedes is green.
次の行は次のようなものです: 辞書catched
にキーが 1 つしかないかどうかを確認し、そのキーの値がすべて車の場合、All <type> are <value>.