Retext implementation of the Metaphone algorithm.
npm:
npm install retext-metaphone
retext-metaphone is also available for bower, component, and duo, and as an AMD, CommonJS, and globals module, uncompressed and compressed.
var retext = require('retext');
var inspect = require('unist-util-inspect');
var metaphone = require('retext-metaphone');
retext().use(metaphone).use(function () {
return function (cst) {
console.log(inspect(cst));
};
}).process('A simple English sentence.');
Yields:
RootNode[1]
└─ ParagraphNode[1]
└─ SentenceNode[8]
├─ WordNode[1] [data={"phonetics":"A"}]
│ └─ TextNode: 'A'
├─ WhiteSpaceNode: ' '
├─ WordNode[1] [data={"phonetics":"SMPL"}]
│ └─ TextNode: 'simple'
├─ WhiteSpaceNode: ' '
├─ WordNode[1] [data={"phonetics":"ENKLX"}]
│ └─ TextNode: 'English'
├─ WhiteSpaceNode: ' '
├─ WordNode[1] [data={"phonetics":"SNTNS"}]
│ └─ TextNode: 'sentence'
└─ PunctuationNode: '.'
You can also combine it with a stemmer (such as retext-porter-stemmer or retext-lancaster-stemmer).
var retext = require('retext');
var inspect = require('unist-util-inspect');
var metaphone = require('retext-metaphone');
var stemmer = require('retext-porter-stemmer');
retext().use(stemmer).use(metaphone).use(function () {
return function (cst) {
console.log(inspect(cst));
};
}).process('A simple English sentence.');
Yields:
RootNode[1]
└─ ParagraphNode[1]
└─ SentenceNode[6]
├─ WordNode[1] [data={"stem":"a","phonetics":"A","stemmedPhonetics":"A"}]
│ └─ TextNode: 'A'
├─ WhiteSpaceNode: ' '
├─ WordNode[1] [data={"stem":"detest","phonetics":"TTSTBL","stemmedPhonetics":"TTST"}]
│ └─ TextNode: 'detestable'
├─ WhiteSpaceNode: ' '
├─ WordNode[1] [data={"stem":"paragraph","phonetics":"PRKRF","stemmedPhonetics":"PRKRF"}]
│ └─ TextNode: 'paragraph'
└─ PunctuationNode: '.'
None, retext-metaphone automatically detects the phonetics of each
WordNode
(using wooorm/metaphone),
and stores the phonetics in node.data.phonetics
. If a stemmer is used,
the stemmed phonetics are stored in node.data.stemmedPhonetics
.