Add files via upload

This commit is contained in:
Peter Norvig
2017-09-05 20:44:43 -07:00
committed by GitHub
parent 013d5ca89c
commit e0cda05c28

View File

@@ -40,9 +40,7 @@
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"metadata": {},
"outputs": [],
"source": [
"import re\n",
@@ -64,15 +62,41 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"And now the actual rules. If you have a sentence that is not translated correctly by this program, you can augment these rules to handle your sentence."
"Let's see what a rule looks like:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(('{P} ⇒ {Q}',\n",
" ['if (?P<P>.+?) then (?P<Q>.+?)$', 'if (?P<P>.+?), (?P<Q>.+?)$']),)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Rule('{P} ⇒ {Q}', 'if {P} then {Q}', 'if {P}, {Q}'),"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And now the actual rules. If you have a sentence that is not translated correctly by this program, you can augment these rules to handle your sentence."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"rules = [\n",
@@ -82,8 +106,9 @@
" Rule('{P} ⋀ {Q}', 'neither {P} nor {Q}'),\n",
" Rule('{A}{P} ⋀ {A}{Q}', '{A} neither {P} nor {Q}'), # The Kaiser neither ...\n",
" Rule('{Q} ⇒ {P}', '{P} unless {Q}'),\n",
" Rule('{P} ⇒ {Q}', '{Q} provided that {P}', '{Q} whenever {P}', '{P} implies {Q}',\n",
" '{P} therefore {Q}', '{Q}, if {P}', '{Q} if {P}', '{P} only if {Q}'),\n",
" Rule('{P} ⇒ {Q}', '{Q} provided that {P}', '{Q} whenever {P}', \n",
" '{P} implies {Q}', '{P} therefore {Q}', \n",
" '{Q}, if {P}', '{Q} if {P}', '{P} only if {Q}'),\n",
" Rule('{P} ⋀ {Q}', '{P} and {Q}', '{P} but {Q}'),\n",
" Rule('{P} {Q}', '{P} or else {Q}', '{P} or {Q}'),\n",
" ]\n",
@@ -102,15 +127,13 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Now the mechanism to process these rules. Note that `defs` is a dict of definitions of propositional symbols: `{P: 'english'}`. The three `match_*` functions return two values: the translation of a sentence, and a dict of defintions."
"Now the mechanism to process these rules. Note that the parameter `defs` is a dict of definitions of propositional symbols: `{P: 'english'}`. The three `match_*` functions return two values: the translation of a sentence, and a dict of defintions."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def match_rules(sentence, rules, defs):\n",
@@ -167,63 +190,61 @@
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"__________________________________________________________________________________________________________ \n",
"__________________________________________________________________________________________ \n",
"Polkadots and Moonbeams \n",
"Logic: (P ⋀ Q)\n",
"P: Polkadots\n",
"Q: Moonbeams\n",
"__________________________________________________________________________________________________________ \n",
"__________________________________________________________________________________________ \n",
"If you liked it then you shoulda put a ring on it \n",
"Logic: (P ⇒ Q)\n",
"P: you liked it\n",
"Q: you shoulda put a ring on it\n",
"__________________________________________________________________________________________________________ \n",
"__________________________________________________________________________________________ \n",
"If you build it, he will come \n",
"Logic: (P ⇒ Q)\n",
"P: you build it\n",
"Q: he will come\n",
"__________________________________________________________________________________________________________ \n",
"__________________________________________________________________________________________ \n",
"It don't mean a thing, if it ain't got that swing \n",
"Logic: (P ⇒ Q)\n",
"P: it is got that swing\n",
"Q: It do mean a thing\n",
"__________________________________________________________________________________________________________ \n",
"__________________________________________________________________________________________ \n",
"If loving you is wrong, I don't want to be right \n",
"Logic: (P ⇒ Q)\n",
"P: loving you is wrong\n",
"Q: I do want to be right\n",
"__________________________________________________________________________________________________________ \n",
"__________________________________________________________________________________________ \n",
"Should I stay or should I go \n",
"Logic: (P Q)\n",
"P: Should I stay\n",
"Q: should I go\n",
"__________________________________________________________________________________________________________ \n",
"__________________________________________________________________________________________ \n",
"I shouldn't go and I shouldn't not go \n",
"Logic: (P ⋀ P)\n",
"P: I should go\n",
"__________________________________________________________________________________________________________ \n",
"__________________________________________________________________________________________ \n",
"If I fell in love with you, would you promise to be true and help me understand \n",
"Logic: (P ⇒ (Q ⋀ R))\n",
"P: I fell in love with you\n",
"Q: would you promise to be true\n",
"R: help me understand\n",
"__________________________________________________________________________________________________________ \n",
"I could while away the hours conferrin' with the flowers, consulting with the rain and my head I'd be a\n",
"scratchin' while my thoughts are busy hatchin' if I only had a brain \n",
"__________________________________________________________________________________________ \n",
"I could while away the hours conferrin' with the flowers, consulting with the rain and my\n",
"head I'd be a scratchin' while my thoughts are busy hatchin' if I only had a brain \n",
"Logic: (P ⇒ (Q ⋀ R))\n",
"P: I only had a brain\n",
"Q: I could while away the hours conferrin' with the flowers, consulting with the rain\n",
"R: my head I'd be a scratchin' while my thoughts are busy hatchin'\n",
"__________________________________________________________________________________________________________ \n",
"__________________________________________________________________________________________ \n",
"There's a federal tax, and a state tax, and a city tax, and a street tax, and a sewer tax \n",
"Logic: (P ⋀ (Q ⋀ (R ⋀ (S ⋀ T))))\n",
"P: There's a federal tax\n",
@@ -231,50 +252,53 @@
"R: a city tax\n",
"S: a street tax\n",
"T: a sewer tax\n",
"__________________________________________________________________________________________________________ \n",
"A ham sandwich is better than nothing and nothing is better than eternal happiness therefore a ham\n",
"sandwich is better than eternal happiness \n",
"__________________________________________________________________________________________ \n",
"A ham sandwich is better than nothing and nothing is better than eternal happiness\n",
"therefore a ham sandwich is better than eternal happiness \n",
"Logic: ((P ⋀ Q) ⇒ R)\n",
"P: A ham sandwich is better than nothing\n",
"Q: nothing is better than eternal happiness\n",
"R: a ham sandwich is better than eternal happiness\n",
"__________________________________________________________________________________________________________ \n",
"If I were a carpenter and you were a lady, would you marry me anyway? and would you have my baby \n",
"__________________________________________________________________________________________ \n",
"If I were a carpenter and you were a lady, would you marry me anyway? and would you have\n",
"my baby \n",
"Logic: ((P ⋀ Q) ⇒ (R ⋀ S))\n",
"P: I were a carpenter\n",
"Q: you were a lady\n",
"R: would you marry me anyway?\n",
"S: would you have my baby\n",
"__________________________________________________________________________________________________________ \n",
"__________________________________________________________________________________________ \n",
"Either Danny didn't come to the party or Virgil didn't come to the party \n",
"Logic: (P Q)\n",
"P: Danny did come to the party\n",
"Q: Virgil did come to the party\n",
"__________________________________________________________________________________________________________ \n",
"Either Wotan will triumph and Valhalla will be saved or else he won't and Alberic will have the final word \n",
"__________________________________________________________________________________________ \n",
"Either Wotan will triumph and Valhalla will be saved or else he won't and Alberic will\n",
"have the final word \n",
"Logic: ((P ⋀ Q) (R ⋀ S))\n",
"P: Wotan will triumph\n",
"Q: Valhalla will be saved\n",
"R: he will\n",
"S: Alberic will have the final word\n",
"__________________________________________________________________________________________________________ \n",
"Sieglinde will survive, and either her son will gain the Ring and Wotan's plan will be fulfilled or else\n",
"Valhalla will be destroyed \n",
"__________________________________________________________________________________________ \n",
"Sieglinde will survive, and either her son will gain the Ring and Wotan's plan will be\n",
"fulfilled or else Valhalla will be destroyed \n",
"Logic: (P ⋀ ((Q ⋀ R) S))\n",
"P: Sieglinde will survive\n",
"Q: her son will gain the Ring\n",
"R: Wotan's plan will be fulfilled\n",
"S: Valhalla will be destroyed\n",
"__________________________________________________________________________________________________________ \n",
"Wotan will intervene and cause Siegmund's death unless either Fricka relents or Brunnhilde has her way \n",
"__________________________________________________________________________________________ \n",
"Wotan will intervene and cause Siegmund's death unless either Fricka relents or Brunnhilde\n",
"has her way \n",
"Logic: ((R S) ⇒ (P ⋀ Q))\n",
"P: Wotan will intervene\n",
"Q: cause Siegmund's death\n",
"R: Fricka relents\n",
"S: Brunnhilde has her way\n",
"__________________________________________________________________________________________________________ \n",
"Figaro and Susanna will wed provided that either Antonio or Figaro pays and Bartolo is satisfied or else\n",
"Marcellina's contract is voided and the Countess does not act rashly \n",
"__________________________________________________________________________________________ \n",
"Figaro and Susanna will wed provided that either Antonio or Figaro pays and Bartolo is\n",
"satisfied or else Marcellina's contract is voided and the Countess does not act rashly \n",
"Logic: ((((P Q) ⋀ R) (S ⋀ T)) ⇒ (U ⋀ V))\n",
"P: Antonio\n",
"Q: Figaro pays\n",
@@ -283,10 +307,10 @@
"T: the Countess does act rashly\n",
"U: Figaro\n",
"V: Susanna will wed\n",
"__________________________________________________________________________________________________________ \n",
"If the Kaiser neither prevents Bismarck from resigning nor supports the Liberals, then the military will\n",
"be in control and either Moltke's plan will be executed or else the people will revolt and the Reich will\n",
"not survive \n",
"__________________________________________________________________________________________ \n",
"If the Kaiser neither prevents Bismarck from resigning nor supports the Liberals, then the\n",
"military will be in control and either Moltke's plan will be executed or else the people\n",
"will revolt and the Reich will not survive \n",
"Logic: ((PQ ⋀ PR) ⇒ (S ⋀ (T (U ⋀ V))))\n",
"P: the Kaiser\n",
"Q: prevents Bismarck from resigning\n",
@@ -337,7 +361,7 @@
"\n",
"import textwrap\n",
"\n",
"def logic(sentences, width=106): \n",
"def logic(sentences, width=90): \n",
" \"Match the rules against each sentence in text, and print each result.\"\n",
" for s in map(clean, sentences):\n",
" logic, defs = match_rules(s, rules, {})\n",
@@ -394,9 +418,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
"version": "3.5.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
"nbformat_minor": 1
}