Я загрузил SharpNLP с этого сайта http://sharpnlp.codeplex.com/ но он загрузил .nbin файл, который я не знаю, как с этим бороться. Любая помощь pleeeeeeeease?
SharpNLP как расширение .nbin
Ответ 1
Я тоже был таким же, как вы. Но с некоторой битвой я нашел несколько способов использовать файл Nbin. Как указано, файлы Nbin являются обученными моделями. Мы можем создать Nbin файл, используя BinaryGisModelWriter. Однако, как и я, я считаю, что вам тоже не интересно создавать свою собственную модель, но эффективно использовать файлы nbin в вашем проекте.
Для этого вам нужны две библиотеки dll.
SharpEntropy.dll OpenNLP.dll
Кроме этого для быстрого запуска вы можете загрузить Пример проекта из проекта кода для 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);
}
Для Tokenizer
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 для Отслеживание приговоров, токенизацию и маркировку POS соответственно. Файлы nbin представляют собой только предварительно подготовленные модели, которые могут использоваться с SharpNLP или OpenNLP в целом.
Вы можете найти последний набор обучаемых моделей из Официальные модели инструментов OpenNLP или Из репозитория Codeplex файлов Nbin для использования с SharpNLP
Образец тегов POS с использованием вышеуказанных методов и файлов Nbin будет выглядеть следующим образом:
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");
}
}
Вы можете написать похожие методы для chunking, parsing и т.д., используя доступные файлы 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. Пожалуйста, подумайте, чтобы обсудить любые проблемы, с которыми вы сталкиваетесь. Я буду рад ответить.