mirror of
https://github.com/evennia/evennia.git
synced 2026-03-26 17:56:32 +01:00
550 lines
No EOL
68 KiB
HTML
550 lines
No EOL
68 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>lunr.stemmer — Evennia latest documentation</title>
|
|
<link rel="stylesheet" href="../../_static/nature.css" type="text/css" />
|
|
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
|
|
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=d75fae25" />
|
|
<link rel="stylesheet" type="text/css" href="../../_static/nature.css?v=245aff17" />
|
|
<script id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
|
|
<script src="../../_static/documentation_options.js?v=c6e86fd7"></script>
|
|
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
|
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
<link rel="index" title="Index" href="../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../search.html" />
|
|
</head><body>
|
|
|
|
|
|
|
|
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../index.html">Evennia latest</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">lunr.stemmer</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="document">
|
|
|
|
<div class="documentwrapper">
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<search id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</search>
|
|
<script>document.getElementById('searchbox').style.display = "block"</script><h3>Links</h3>
|
|
<ul>
|
|
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
|
|
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
|
|
<li><a href="https://github.com/evennia/evennia">Github</a> </li>
|
|
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
|
<li>
|
|
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
|
|
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
|
|
<a href="https://evennia.blogspot.com/">Blog</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for lunr.stemmer</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">Implementation of Porter Stemming Algorithm from</span>
|
|
<span class="sd">https://tartarus.org/martin/PorterStemmer/python.txt</span>
|
|
|
|
<span class="sd">Note: The Python implementation returns different results than the JS</span>
|
|
<span class="sd">version:</span>
|
|
<span class="sd">- Stemming "lay" returns "lai" in Python, but "lay" in JS</span>
|
|
<span class="sd">- Stemming "try" returns "try" in Python, but "tri" in JS</span>
|
|
|
|
|
|
<span class="sd">Porter Stemming Algorithm</span>
|
|
<span class="sd">This is the Porter stemming algorithm, ported to Python from the</span>
|
|
<span class="sd">version coded up in ANSI C by the author. It may be be regarded</span>
|
|
<span class="sd">as canonical, in that it follows the algorithm presented in</span>
|
|
|
|
<span class="sd">Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14,</span>
|
|
<span class="sd">no. 3, pp 130-137,</span>
|
|
|
|
<span class="sd">only differing from it at the points maked --DEPARTURE-- below.</span>
|
|
|
|
<span class="sd">See also http://www.tartarus.org/~martin/PorterStemmer</span>
|
|
|
|
<span class="sd">The algorithm as described in the paper could be exactly replicated</span>
|
|
<span class="sd">by adjusting the points of DEPARTURE, but this is barely necessary,</span>
|
|
<span class="sd">because (a) the points of DEPARTURE are definitely improvements, and</span>
|
|
<span class="sd">(b) no encoding of the Porter stemmer I have seen is anything like</span>
|
|
<span class="sd">as exact as this version, even with the points of DEPARTURE!</span>
|
|
|
|
<span class="sd">Vivake Gupta (v@nano.com)</span>
|
|
|
|
<span class="sd">Release 1: January 2001</span>
|
|
|
|
<span class="sd">Further adjustments by Santiago Bruno (bananabruno@gmail.com)</span>
|
|
<span class="sd">to allow word input not restricted to one word per line, leading</span>
|
|
<span class="sd">to:</span>
|
|
|
|
<span class="sd">release 2: July 2008</span>
|
|
<span class="sd">"""</span>
|
|
|
|
<span class="kn">from</span><span class="w"> </span><span class="nn">lunr.pipeline</span><span class="w"> </span><span class="kn">import</span> <span class="n">Pipeline</span>
|
|
|
|
|
|
<span class="k">class</span><span class="w"> </span><span class="nc">PorterStemmer</span><span class="p">:</span>
|
|
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""The main part of the stemming algorithm starts here.</span>
|
|
<span class="sd"> b is a buffer holding a word to be stemmed. The letters are in b[k0],</span>
|
|
<span class="sd"> b[k0+1] ... ending at b[k]. In fact k0 = 0 in this demo program. k is</span>
|
|
<span class="sd"> readjusted downwards as the stemming progresses. Zero termination is</span>
|
|
<span class="sd"> not in fact used in the algorithm.</span>
|
|
|
|
<span class="sd"> Note that only lower case sequences are stemmed. Forcing to lower case</span>
|
|
<span class="sd"> should be done before stem(...) is called.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">b</span> <span class="o">=</span> <span class="s2">""</span> <span class="c1"># buffer for word to be stemmed</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k0</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">j</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># j is a general offset into the string</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">cons</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""cons(i) is TRUE <=> b[i] is a consonant."""</span>
|
|
<span class="k">if</span> <span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"a"</span>
|
|
<span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"e"</span>
|
|
<span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"i"</span>
|
|
<span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"o"</span>
|
|
<span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"u"</span>
|
|
<span class="p">):</span>
|
|
<span class="k">return</span> <span class="mi">0</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"y"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">k0</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons</span><span class="p">(</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="mi">1</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">m</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""m() measures the number of consonant sequences between k0 and j.</span>
|
|
<span class="sd"> if c is a consonant sequence and v a vowel sequence, and <..></span>
|
|
<span class="sd"> indicates arbitrary presence,</span>
|
|
|
|
<span class="sd"> <c><v> gives 0</span>
|
|
<span class="sd"> <c>vc<v> gives 1</span>
|
|
<span class="sd"> <c>vcvc<v> gives 2</span>
|
|
<span class="sd"> <c>vcvcvc<v> gives 3</span>
|
|
<span class="sd"> ....</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">n</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k0</span>
|
|
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">i</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">j</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">n</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
|
|
<span class="k">break</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">i</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">j</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">n</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
|
|
<span class="k">break</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">n</span> <span class="o">=</span> <span class="n">n</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">i</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">j</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">n</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
|
|
<span class="k">break</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">vowelinstem</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""vowelinstem() is TRUE <=> k0,...j contains a vowel"""</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">k0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="mi">1</span>
|
|
<span class="k">return</span> <span class="mi">0</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">doublec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">j</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""doublec(j) is TRUE <=> j,(j-1) contain a double consonant."""</span>
|
|
<span class="k">if</span> <span class="n">j</span> <span class="o"><</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">k0</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="mi">0</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="n">j</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]:</span>
|
|
<span class="k">return</span> <span class="mi">0</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">cvc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""cvc(i) is TRUE <=> i-2,i-1,i has the form consonant - vowel - consonant</span>
|
|
<span class="sd"> and also if the second c is not w,x or y. this is used when trying to</span>
|
|
<span class="sd"> restore an e at the end of a short e.g.</span>
|
|
|
|
<span class="sd"> cav(e), lov(e), hop(e), crim(e), but</span>
|
|
<span class="sd"> snow, box, tray.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="p">(</span>
|
|
<span class="n">i</span> <span class="o"><</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">k0</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
|
|
<span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons</span><span class="p">(</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons</span><span class="p">(</span><span class="n">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="p">):</span>
|
|
<span class="k">return</span> <span class="mi">0</span>
|
|
<span class="n">ch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">ch</span> <span class="o">==</span> <span class="s2">"w"</span> <span class="ow">or</span> <span class="n">ch</span> <span class="o">==</span> <span class="s2">"x"</span> <span class="ow">or</span> <span class="n">ch</span> <span class="o">==</span> <span class="s2">"y"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="mi">0</span>
|
|
<span class="k">return</span> <span class="mi">1</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">ends</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""ends(s) is TRUE <=> k0,...k ends with the string s."""</span>
|
|
<span class="n">length</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">s</span><span class="p">[</span><span class="n">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">]:</span> <span class="c1"># tiny speed-up</span>
|
|
<span class="k">return</span> <span class="mi">0</span>
|
|
<span class="k">if</span> <span class="n">length</span> <span class="o">></span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">k0</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="mi">0</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="n">length</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="n">s</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="mi">0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">j</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="n">length</span>
|
|
<span class="k">return</span> <span class="mi">1</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">setto</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""setto(s) sets (j+1),...k to the characters in the string s, readjusting k."""</span>
|
|
<span class="n">length</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">b</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[:</span> <span class="bp">self</span><span class="o">.</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">s</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">j</span> <span class="o">+</span> <span class="n">length</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">j</span> <span class="o">+</span> <span class="n">length</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">r</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">s</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""r(s) is used further down."""</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">m</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">setto</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">step1ab</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""step1ab() gets rid of plurals and -ed or -ing. e.g.</span>
|
|
|
|
<span class="sd"> caresses -> caress</span>
|
|
<span class="sd"> ponies -> poni</span>
|
|
<span class="sd"> ties -> ti</span>
|
|
<span class="sd"> caress -> caress</span>
|
|
<span class="sd"> cats -> cat</span>
|
|
|
|
<span class="sd"> feed -> feed</span>
|
|
<span class="sd"> agreed -> agree</span>
|
|
<span class="sd"> disabled -> disable</span>
|
|
|
|
<span class="sd"> matting -> mat</span>
|
|
<span class="sd"> mating -> mate</span>
|
|
<span class="sd"> meeting -> meet</span>
|
|
<span class="sd"> milling -> mill</span>
|
|
<span class="sd"> messing -> mess</span>
|
|
|
|
<span class="sd"> meetings -> meet</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"s"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"sses"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">2</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ies"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">setto</span><span class="p">(</span><span class="s2">"i"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">"s"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"eed"</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">m</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ed"</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ing"</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">vowelinstem</span><span class="p">():</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">j</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"at"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">setto</span><span class="p">(</span><span class="s2">"ate"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"bl"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">setto</span><span class="p">(</span><span class="s2">"ble"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"iz"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">setto</span><span class="p">(</span><span class="s2">"ize"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">doublec</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="n">ch</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">ch</span> <span class="o">==</span> <span class="s2">"l"</span> <span class="ow">or</span> <span class="n">ch</span> <span class="o">==</span> <span class="s2">"s"</span> <span class="ow">or</span> <span class="n">ch</span> <span class="o">==</span> <span class="s2">"z"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">m</span><span class="p">()</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">cvc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">setto</span><span class="p">(</span><span class="s2">"e"</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">step1c</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""step1c() turns terminal y to i when there is another vowel in the stem."""</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"y"</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">vowelinstem</span><span class="p">():</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">b</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[:</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"i"</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">step2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""step2() maps double suffices to single ones.</span>
|
|
<span class="sd"> so -ization ( = -ize plus -ation) maps to -ize etc. note that the</span>
|
|
<span class="sd"> string before the suffix must give m() > 0.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"a"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ational"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ate"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"tional"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"tion"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"c"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"enci"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ence"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"anci"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ance"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"e"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"izer"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ize"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"l"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"bli"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ble"</span><span class="p">)</span> <span class="c1"># --DEPARTURE--</span>
|
|
<span class="c1"># To match the published algorithm, replace this phrase with</span>
|
|
<span class="c1"># if self.ends("abli"): self.r("able")</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"alli"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"al"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"entli"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ent"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"eli"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"e"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ousli"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ous"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"o"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ization"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ize"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ation"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ate"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ator"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ate"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"s"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"alism"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"al"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"iveness"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ive"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"fulness"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ful"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ousness"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ous"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"t"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"aliti"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"al"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"iviti"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ive"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"biliti"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ble"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"g"</span><span class="p">:</span> <span class="c1"># --DEPARTURE--</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"logi"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"log"</span><span class="p">)</span>
|
|
<span class="c1"># To match the published algorithm, delete this phrase</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">step3</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""step3() dels with -ic-, -full, -ness etc. similar strategy to step2."""</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"e"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"icate"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ic"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ative"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"alize"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"al"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"i"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"iciti"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ic"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"l"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ical"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">"ic"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ful"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"s"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ness"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">r</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">step4</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""step4() takes off -ant, -ence etc., in context <c>vcvc<v>."""</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"a"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"al"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"c"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ance"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ence"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"e"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"er"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"i"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ic"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"l"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"able"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ible"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"n"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ant"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ement"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ment"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ent"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"o"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ion"</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">j</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"s"</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">j</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"t"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ou"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="c1"># takes care of -ous</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"s"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ism"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"t"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ate"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"iti"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"u"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ous"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"v"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ive"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"z"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ends</span><span class="p">(</span><span class="s2">"ize"</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">m</span><span class="p">()</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">j</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">step5</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""step5() removes a final -e if m() > 1, and changes -ll to -l if</span>
|
|
<span class="sd"> m() > 1.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">j</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"e"</span><span class="p">:</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">m</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">a</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">or</span> <span class="p">(</span><span class="n">a</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">cvc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"l"</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">doublec</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">m</span><span class="p">()</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">-</span> <span class="mi">1</span>
|
|
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">stem</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="n">metadata</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""In stem(p,i,j), p is a char pointer, and the string to be stemmed</span>
|
|
<span class="sd"> is from p[i] to p[j] inclusive. Typically i is zero and j is the</span>
|
|
<span class="sd"> offset to the last character of a string, (p[j+1] == '\0'). The</span>
|
|
<span class="sd"> stemmer adjusts the characters p[i] ... p[j] and returns the new</span>
|
|
<span class="sd"> end-point of the string, k. Stemming never increases word length, so</span>
|
|
<span class="sd"> i <= k <= j. To turn the stemmer into a module, declare 'stem' as</span>
|
|
<span class="sd"> extern, and delete the remainder of this file.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># TODO: removed i and j from the original implementation</span>
|
|
<span class="c1"># to comply with the `token.update` API</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">j</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
|
|
<span class="c1"># copy the parameters into statics</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">b</span> <span class="o">=</span> <span class="n">p</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">k0</span> <span class="o">=</span> <span class="n">i</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o"><=</span> <span class="bp">self</span><span class="o">.</span><span class="n">k0</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span> <span class="c1"># --DEPARTURE--</span>
|
|
|
|
<span class="c1"># With this line, strings of length 1 or 2 don't go through the</span>
|
|
<span class="c1"># stemming process, although no mention is made of this in the</span>
|
|
<span class="c1"># published algorithm. Remove the line to match the published</span>
|
|
<span class="c1"># algorithm.</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">step1ab</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">step1c</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">step2</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">step3</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">step4</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">step5</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">b</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">k0</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">k</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
|
|
|
|
|
|
<span class="n">porter_stemmer</span> <span class="o">=</span> <span class="n">PorterStemmer</span><span class="p">()</span>
|
|
|
|
|
|
<div class="viewcode-block" id="stemmer">
|
|
<a class="viewcode-back" href="../../api/evennia.help.utils.html#evennia.help.utils.stemmer">[docs]</a>
|
|
<span class="k">def</span><span class="w"> </span><span class="nf">stemmer</span><span class="p">(</span><span class="n">token</span><span class="p">,</span> <span class="n">i</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Wrapper around the PorterStemmer for inclusion in pipeline.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> language (str): ISO-639-1 code of the language.</span>
|
|
<span class="sd"> token (lunr.Token): The token to stem.</span>
|
|
<span class="sd"> i (int): The index of the token in a set.</span>
|
|
<span class="sd"> tokens (list): A list of tokens representing the set.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">token</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">porter_stemmer</span><span class="o">.</span><span class="n">stem</span><span class="p">)</span></div>
|
|
|
|
|
|
|
|
<span class="n">Pipeline</span><span class="o">.</span><span class="n">register_function</span><span class="p">(</span><span class="n">stemmer</span><span class="p">,</span> <span class="s2">"stemmer"</span><span class="p">)</span>
|
|
</pre></div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../index.html">Evennia latest</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">lunr.stemmer</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2024, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
|
|
</div>
|
|
</body>
|
|
</html> |