我已经从这个站点http://sharpnlp.codeplex.com/ 下载了 SharpNLP,但它下载了 .nbin 文件,我不知道如何处理。任何帮助pleeeeeeeease?
1 回答
我也是和你一样的用户。但经过一番努力,我找到了几种使用 Nbin 文件的方法。如前所述,Nbin 文件是经过训练的模型。我们可以使用BinaryGisModelWriter创建 Nbin 文件。但是,就像我一样,我相信您也对创建自己的模型不感兴趣,而是在您的项目中有效地使用 nbin 文件。
为此,您需要两个 dll。
SharpEntropy.dll OpenNLP.dll
除此之外,为了快速入门,您可以从 Code Project for SharpNLP 下载示例项目
最好下载.NET 2.0 版本的示例
在其中,您将有一个名为 OpenNLP 的项目。将该项目添加到您希望使用 NLP 或 nbin 文件的任何项目中,并将解决方案中的引用添加到“OpenNLP”项目。
现在从您的主要解决方案中,您可以初始化不同的工具,例如,我将向您展示句子检测器、标记器和 PosTagger 的初始化
private string mModelPath = @"C:\Users\ATS\Documents\Visual Studio 2012\Projects\Google_page_speed_json\Google_page_speed_json\bin\Release\";
private OpenNLP.Tools.SentenceDetect.MaximumEntropySentenceDetector mSentenceDetector;
private OpenNLP.Tools.Tokenize.EnglishMaximumEntropyTokenizer mTokenizer;
private OpenNLP.Tools.PosTagger.EnglishMaximumEntropyPosTagger mPosTagger;
mModelPath是保存您希望使用的 nbin 文件路径的变量。
现在我将向您展示如何使用上述定义的类的构造函数来使用 nbin 文件。
对于句子检测器
private string[] SplitSentences(string paragraph)
{
if (mSentenceDetector == null)
{
mSentenceDetector = new OpenNLP.Tools.SentenceDetect.EnglishMaximumEntropySentenceDetector(mModelPath + "EnglishSD.nbin");
}
return mSentenceDetector.SentenceDetect(paragraph);
}
对于分词器
private string[] TokenizeSentence(string sentence)
{
if (mTokenizer == null)
{
mTokenizer = new OpenNLP.Tools.Tokenize.EnglishMaximumEntropyTokenizer(mModelPath + "EnglishTok.nbin");
}
return mTokenizer.Tokenize(sentence);
}
而对于 POSTagger
private string[] PosTagTokens(string[] tokens)
{
if (mPosTagger == null)
{
mPosTagger = new OpenNLP.Tools.PosTagger.EnglishMaximumEntropyPosTagger(mModelPath + "EnglishPOS.nbin", mModelPath + @"\Parser\tagdict");
}
return mPosTagger.Tag(tokens);
}
你可以看到我分别使用了EnglishSD.nbin、EnglishTok.nbin 和 EnglishPOS.nbin来进行句子检测、标记化和词性标注。nbin 文件只是可以使用 SharpNLP 或 OpenNLP 通常使用的预训练模型。
您可以从官方 OpenNLP 工具模型或从用于 SharpNLP 的 Nbin 文件的 Codeplex 存储库中找到最新的训练模型集
使用上述方法和 Nbin 文件的示例 POS 标注器将如下所示,
public void POSTagger_Method(string sent)
{
File.WriteAllText("POSTagged.txt", sent+"\n\n");
string[] split_sentences = SplitSentences(sent);
foreach (string sentence in split_sentences)
{
File.AppendAllText("POSTagged.txt", sentence+"\n");
string[] tokens = TokenizeSentence(sentence);
string[] tags = PosTagTokens(tokens);
for (int currentTag = 0; currentTag < tags.Length; currentTag++)
{
File.AppendAllText("POSTagged.txt", tokens[currentTag] + " - " + tags[currentTag]+"\n");
}
File.AppendAllText("POSTagged.txt", "\n\n");
}
}
您可以使用可用的 Nbin 文件为分块、解析等编写类似的方法,或者您可以训练自己的一种。
虽然我没有自己训练过模型,但从格式整齐的训练文本文件中训练模型的语法是
System.IO.StreamReader trainingStreamReader = new System.IO.StreamReader(trainingDataFile);
SharpEntropy.ITrainingEventReader eventReader = new SharpEntropy.BasicEventReader(new SharpEntropy.PlainTextByLineDataReader(trainingStreamReader));
SharpEntropy.GisTrainer trainer = new SharpEntropy.GisTrainer();
trainer.TrainModel(eventReader);
mModel = new SharpEntropy.GisModel(trainer);
我相信这篇文章将帮助您开始使用 SharpNLP。请随时讨论您面临的任何问题。我很乐意回复。