{
  "Lucene.Net.Classification.ClassificationResult-1.html": {
    "href": "Lucene.Net.Classification.ClassificationResult-1.html",
    "title": "Class ClassificationResult<T> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class ClassificationResult<T> The result of a call to AssignClass(String) holding an assigned class of type and a score. This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object ClassificationResult<T> Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public class ClassificationResult<T> Type Parameters Name Description T Constructors | Improve this Doc View Source ClassificationResult(T, Double) Constructor the class T assigned by a IClassifier<T> score the score for the assignedClass as a System.Double Declaration public ClassificationResult(T assignedClass, double score) Parameters Type Name Description T assignedClass System.Double score Properties | Improve this Doc View Source AssignedClass retrieve the result class @return a T representing an assigned class Declaration public virtual T AssignedClass { get; } Property Value Type Description T | Improve this Doc View Source Score Gets a System.Double representing a result score. Declaration public virtual double Score { get; } Property Value Type Description System.Double"
  },
  "Lucene.Net.Classification.html": {
    "href": "Lucene.Net.Classification.html",
    "title": "Namespace Lucene.Net.Classification | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Classification <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Uses already seen data (the indexed documents) to classify new documents. Currently only contains a (simplistic) Lucene based Naive Bayes classifier and a k-Nearest Neighbor classifier Classes ClassificationResult<T> The result of a call to AssignClass(String) holding an assigned class of type and a score. This is a Lucene.NET EXPERIMENTAL API, use at your own risk KNearestNeighborClassifier A k-Nearest Neighbor classifier (see http://en.wikipedia.org/wiki/K-nearest_neighbors ) based on Lucene.Net.Queries.Mlt.MoreLikeThis This is a Lucene.NET EXPERIMENTAL API, use at your own risk SimpleNaiveBayesClassifier A simplistic Lucene based NaiveBayes classifier, see http://en.wikipedia.org/wiki/Naive_Bayes_classifier This is a Lucene.NET EXPERIMENTAL API, use at your own risk Interfaces IClassifier<T> A classifier, see http://en.wikipedia.org/wiki/Classifier_(mathematics) , which assign classes of type This is a Lucene.NET EXPERIMENTAL API, use at your own risk"
  },
  "Lucene.Net.Classification.IClassifier-1.html": {
    "href": "Lucene.Net.Classification.IClassifier-1.html",
    "title": "Interface IClassifier<T> | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Interface IClassifier<T> A classifier, see http://en.wikipedia.org/wiki/Classifier_(mathematics) , which assign classes of type This is a Lucene.NET EXPERIMENTAL API, use at your own risk Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public interface IClassifier<T> Type Parameters Name Description T Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration ClassificationResult<T> AssignClass(string text) Parameters Type Name Description System.String text a string containing text to be classified Returns Type Description ClassificationResult <T> a ClassificationResult<T> holding assigned class of type T and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description Lucene.Net.Index.AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Lucene.Net.Analysis.Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description Lucene.Net.Index.AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Lucene.Net.Analysis.Analyzer analyzer the analyzer used to tokenize / filter the unseen text Lucene.Net.Search.Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description Lucene.Net.Index.AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Lucene.Net.Analysis.Analyzer analyzer the analyzer used to tokenize / filter the unseen text Lucene.Net.Search.Query query the query to filter which documents use for training"
  },
  "Lucene.Net.Classification.KNearestNeighborClassifier.html": {
    "href": "Lucene.Net.Classification.KNearestNeighborClassifier.html",
    "title": "Class KNearestNeighborClassifier | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class KNearestNeighborClassifier A k-Nearest Neighbor classifier (see http://en.wikipedia.org/wiki/K-nearest_neighbors ) based on Lucene.Net.Queries.Mlt.MoreLikeThis This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object KNearestNeighborClassifier Implements IClassifier < BytesRef > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public class KNearestNeighborClassifier : IClassifier<BytesRef> Constructors | Improve this Doc View Source KNearestNeighborClassifier(Int32) Create a IClassifier<T> using kNN algorithm Declaration public KNearestNeighborClassifier(int k) Parameters Type Name Description System.Int32 k the number of neighbors to analyze as an System.Int32 | Improve this Doc View Source KNearestNeighborClassifier(Int32, Int32, Int32) Create a IClassifier<T> using kNN algorithm Declaration public KNearestNeighborClassifier(int k, int minDocsFreq, int minTermFreq) Parameters Type Name Description System.Int32 k the number of neighbors to analyze as an System.Int32 System.Int32 minDocsFreq the minimum number of docs frequency for MLT to be set with Lucene.Net.Queries.Mlt.MoreLikeThis.MinDocFreq System.Int32 minTermFreq the minimum number of term frequency for MLT to be set with Lucene.Net.Queries.Mlt.MoreLikeThis.MinTermFreq Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration public virtual ClassificationResult<BytesRef> AssignClass(string text) Parameters Type Name Description System.String text a string containing text to be classified Returns Type Description ClassificationResult < BytesRef > a ClassificationResult<T> holding assigned class of type BytesRef and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description Lucene.Net.Index.AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Lucene.Net.Analysis.Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description Lucene.Net.Index.AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Lucene.Net.Analysis.Analyzer analyzer the analyzer used to tokenize / filter the unseen text Lucene.Net.Search.Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description Lucene.Net.Index.AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Lucene.Net.Analysis.Analyzer analyzer the analyzer used to tokenize / filter the unseen text Lucene.Net.Search.Query query the query to filter which documents use for training Implements IClassifier<T>"
  },
  "Lucene.Net.Classification.SimpleNaiveBayesClassifier.html": {
    "href": "Lucene.Net.Classification.SimpleNaiveBayesClassifier.html",
    "title": "Class SimpleNaiveBayesClassifier | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class SimpleNaiveBayesClassifier A simplistic Lucene based NaiveBayes classifier, see http://en.wikipedia.org/wiki/Naive_Bayes_classifier This is a Lucene.NET EXPERIMENTAL API, use at your own risk Inheritance System.Object SimpleNaiveBayesClassifier Implements IClassifier < BytesRef > Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Classification Assembly : Lucene.Net.Classification.dll Syntax public class SimpleNaiveBayesClassifier : IClassifier<BytesRef> Constructors | Improve this Doc View Source SimpleNaiveBayesClassifier() Creates a new NaiveBayes classifier. Note that you must call Train(AtomicReader, String, String, Analyzer) before you can classify any documents. Declaration public SimpleNaiveBayesClassifier() Methods | Improve this Doc View Source AssignClass(String) Assign a class (with score) to the given text string Declaration public virtual ClassificationResult<BytesRef> AssignClass(string inputDocument) Parameters Type Name Description System.String inputDocument a string containing text to be classified Returns Type Description ClassificationResult < BytesRef > a ClassificationResult<T> holding assigned class of type BytesRef and score | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer) Parameters Type Name Description Lucene.Net.Index.AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Lucene.Net.Analysis.Analyzer analyzer the analyzer used to tokenize / filter the unseen text | Improve this Doc View Source Train(AtomicReader, String, String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string textFieldName, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description Lucene.Net.Index.AtomicReader atomicReader the reader to use to access the Lucene index System.String textFieldName the name of the field used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Lucene.Net.Analysis.Analyzer analyzer the analyzer used to tokenize / filter the unseen text Lucene.Net.Search.Query query the query to filter which documents use for training | Improve this Doc View Source Train(AtomicReader, String[], String, Analyzer, Query) Train the classifier using the underlying Lucene index Declaration public virtual void Train(AtomicReader atomicReader, string[] textFieldNames, string classFieldName, Analyzer analyzer, Query query) Parameters Type Name Description Lucene.Net.Index.AtomicReader atomicReader the reader to use to access the Lucene index System.String [] textFieldNames the names of the fields to be used to compare documents System.String classFieldName the name of the field containing the class assigned to documents Lucene.Net.Analysis.Analyzer analyzer the analyzer used to tokenize / filter the unseen text Lucene.Net.Search.Query query the query to filter which documents use for training Implements IClassifier<T>"
  },
  "Lucene.Net.Classification.Utils.DatasetSplitter.html": {
    "href": "Lucene.Net.Classification.Utils.DatasetSplitter.html",
    "title": "Class DatasetSplitter | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Class DatasetSplitter Utility class for creating training / test / cross validation indexes from the original index. Inheritance System.Object DatasetSplitter Inherited Members System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone() System.Object.ReferenceEquals(System.Object, System.Object) System.Object.ToString() Namespace : Lucene.Net.Classification.Utils Assembly : Lucene.Net.Classification.dll Syntax public class DatasetSplitter Constructors | Improve this Doc View Source DatasetSplitter(Double, Double) Create a DatasetSplitter by giving test and cross validation IDXs sizes Declaration public DatasetSplitter(double testRatio, double crossValidationRatio) Parameters Type Name Description System.Double testRatio the ratio of the original index to be used for the test IDX as a System.Double between 0.0 and 1.0 System.Double crossValidationRatio the ratio of the original index to be used for the c.v. IDX as a System.Double between 0.0 and 1.0 Methods | Improve this Doc View Source Split(AtomicReader, Directory, Directory, Directory, Analyzer, String[]) Split a given index into 3 indexes for training, test and cross validation tasks respectively Declaration public virtual void Split(AtomicReader originalIndex, Directory trainingIndex, Directory testIndex, Directory crossValidationIndex, Analyzer analyzer, params string[] fieldNames) Parameters Type Name Description Lucene.Net.Index.AtomicReader originalIndex an Lucene.Net.Index.AtomicReader on the source index Lucene.Net.Store.Directory trainingIndex a Lucene.Net.Store.Directory used to write the training index Lucene.Net.Store.Directory testIndex a Lucene.Net.Store.Directory used to write the test index Lucene.Net.Store.Directory crossValidationIndex a Lucene.Net.Store.Directory used to write the cross validation index Lucene.Net.Analysis.Analyzer analyzer Lucene.Net.Analysis.Analyzer used to create the new docs System.String [] fieldNames names of fields that need to be put in the new indexes or null if all should be used Exceptions Type Condition System.IO.IOException if any writing operation fails on any of the indexes"
  },
  "Lucene.Net.Classification.Utils.html": {
    "href": "Lucene.Net.Classification.Utils.html",
    "title": "Namespace Lucene.Net.Classification.Utils | Apache Lucene.NET 4.8.0-beta00013 Documentation",
    "keywords": "Namespace Lucene.Net.Classification.Utils <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> Utilities for evaluation, data preparation, etc. Classes DatasetSplitter Utility class for creating training / test / cross validation indexes from the original index."
  }
}