I have a sentence that has a specific format.
<subject> <action> <object> @ <price> ... // The sentence can continue
and I want to extract these values out of the sentence.
Constraints:
- The subject is always
BoborAlice - Action is either
boughtorsold - The object can be any word of 1-7 letters //
4applesshould return NULL - Price is either a float/integer
- There can be sentences before
subjectbut guaranteed to not containBob/Alice. - There may or may not be a space after
@
Example:
Hi there, Bob sold apples @2.0 dollars each
Desired Output:
Subject: Bob
Action: sold
Object: apples
Price: 2.0
Currently, I do it the naive way by:
#!/usr/bin/env python3
sentence = "Hi there, alice sold apples @2.0 dollars each"
sentence = sentence.lower()
if 'alice' in sentence or 'bob' in sentence:
s_list = sentence.split(" ")
s_idx = -1
if 'bob' in sentence:
s_idx = s_list.index('bob')
elif 'alice' in sentence:
s_idx = s_list.index('alice')
if s_idx > -1:
Subject = s_list[s_idx]
Action = s_list[s_idx+1]
Object = s_list[s_idx+2] #more if/else to validate Object contraints
Price = s_list[s_idx+3] #more if/else to extract 2.0 if we get @2.0
print("Subject: {}, Action: {}, Object: {}, Price: {}".format(Subject, Action, Object, Price))
How can I do this better? Possibly using re