【问题标题】:How I can do stemming on a text file in node.js?如何在 node.js 中对文本文件进行词干处理?
【发布时间】:2019-07-01 17:01:02
【问题描述】:

我想在使用 node.js 的文本文件上使用 NLP 词干提取,然后将其存储在某个输出文件中。如果您需要更多信息,请告诉我。

我正在使用 npm natural 和 PorterStemmer 做同样的事情,但没有成功。

function doStem(data){
    var natural = require('natural');
    //do procesing using WordTokenizer & PorterStemmer.
    return nData;
}

如果我使用了正确的方法,请告诉我,或者如果有任何需要更正的地方,请告诉我。

更新:

function doStemming(data){ 
  var natural = require('natural'); 
  var tokenizer = new natural.WordTokenizer(); 
  var tokens = tokenizer.tokenize(data); 
  stemmer = natural.PorterStemmer(data);
  var nData = stemmer.stem(tokens); 
  //console.log(nData); 
  return nData; 
} 

这就是我正在做的事情。请提供一些关于如何使用标记化和 PorterStemmer 到文本文件而不是任何特定单词的想法

【问题讨论】:

  • 问:[我该怎么做] 使用 node.js 对文本文件进行 NLP 词干提取? - 答:找到一个好的图书馆。问:我正在使用 npm natural 和 PorterStemmer 做同样的事情,但没有成功。 A:那么... Q:具体有什么问题?问:你能告诉我们如何在minimal reproducible example 中重现吗?
  • function doStemming(data){ var natural = require('natural'); var tokenizer = new natural.WordTokenizer(); var tokens = tokenizer.tokenize(data); stemmer = natural.PorterStemmer(data); var nData = stemmer.stem(tokens); //console.log(nData);返回 n 数据;这就是我正在做的事情。请提供一些关于如何使用标记化和 PorterStemmer 到文本文件而不是任何特定单词的想法。
  • 附加信息会有所帮助。我冒昧地更新了您的原始帖子,并添加了一些标签。我仍然不清楚你想要完成什么,或者你在哪里被阻止。
  • 当我运行更新后的代码时,出现以下错误stemmer = natural.PorterStemmer(data); ^ TypeError: natural.PorterStemmer is not a function at doStemming (/home/vishabh/purify/stemer.js:39:21) at ReadStream.<anonymous> (/home/vishabh/purify/stemer.js:20:21) at emitOne (events.js:116:13) at ReadStream.emit (events.js:211:7) at addChunk (_stream_readable.js:263:12) at readableAddChunk (_stream_readable.js:250:11) at ReadStream.Readable.push (_stream_readable.js:208:10) at fs.read (fs.js:2051:12)
  • 你已经得到改掉在 cmets 中发布代码/日志 sn-ps 的习惯 :( 请用任何应该“格式化”的内容更新主帖子. 另外:错误消息表明这只是一个 Javascript 编码错误(不是您的词干库有问题,或者与 NLP 或词干本身有关的任何事情)。考虑尝试在一个minimal reproducible example

标签: node.js nlp stemming porter-stemmer


【解决方案1】:

这是您的代码 sn-p 和您的错误(感谢您发布两者):

代码:

function doStemming(data){ 
  var natural = require('natural'); 
  var tokenizer = new natural.WordTokenizer(); 
  var tokens = tokenizer.tokenize(data); 
  stemmer = natural.PorterStemmer(data);
  var nData = stemmer.stem(tokens); 
  //console.log(nData); 
  return nData; 
} 

错误:

stemmer = natural.PorterStemmer(data); 
                  ^ TypeError: natural.PorterStemmer is not a function 
  at doStemming (/home/vishabh/purify/stemer.js:39:21) 
  at ReadStream.<anonymous> (/home/vishabh/purify/stemer.js:20:21) 
  at emitOne (events.js:116:13) 
  at ReadStream.emit (events.js:211:7) 
  at addChunk (_stream_readable.js:263:12) 
  at readableAddChunk (_stream_readable.js:250:11) 
  at ReadStream.Readable.push (_stream_readable.js:208:10) 
  at fs.read (fs.js:2051:12)

原因:就像错误消息所说:“natural.PorterStemmer()”不是一种方法。相反,“natural.PorterStemmer”是一个OBJECT

看这里:

https://www.npmjs.com/package/natural#stemmers

natural.PorterStemmer.attach();
console.log("i am waking up to the sounds of chainsaws".tokenizeAndStem());
console.log("chainsaws".stem());

换句话说,你可以尝试这样的事情:

function doStemming(data){ 
  var natural = require('natural'); 
  var tokenizer = new natural.WordTokenizer(); 
  var tokens = tokenizer.tokenize(data); 
  var nData = natural.PorterStemmer.stem(tokens); 
  console.log(nData); 
  return nData; 
} 

【讨论】:

  • 非常感谢您的指正和解释。我很难以正确的格式发布代码,所以我只是这样做了。实际上,我关心的是如何将这个词干提取到一个大的 .txt 文件中,因为当涉及到大文本文件时,需要将数据分成块,然后必须应用词干提取过程,最后它应该能够完全创建不同的输出词干文件。我检查了很多地方,但无法正确完成整个过程。请让我知道我将如何成功地做到这一点。
  • 另外请告诉我这是否可以使用 python 文件然后调用 node.js 来完成,或者只能使用 node.js 本身来完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2013-11-24
  • 2021-12-15
相关资源
最近更新 更多