BotSharp/BotSharp.NLP/Txt2Vec/OneHotEncoder.cs

59 lines
1.7 KiB
C#
Raw Normal View History

2018-09-11 03:35:33 +00:00
using BotSharp.NLP.Tokenize;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BotSharp.NLP.Txt2Vec
{
/// <summary>
/// A one hot encoding is a representation of categorical variables as binary vectors.
/// Each integer value is represented as a binary vector that is all zero values except the index of the integer, which is marked with a 1.
/// </summary>
public class OneHotEncoder
{
public List<Sentence> Sentences { get; set; }
public List<string> Words { get; set; }
2018-09-11 03:35:33 +00:00
public void Encode(Sentence sentence)
{
InitDictionary();
var vector = Words.Select(x => 0D).ToArray();
2018-09-11 03:35:33 +00:00
sentence.Words.ForEach(w =>
{
2018-09-13 04:33:34 +00:00
int index = Words.IndexOf(w.Lemma.ToLower());
2018-09-11 03:35:33 +00:00
if(index > 0)
{
vector[index] = 1;
}
});
sentence.Vector = vector;
}
public List<string> EncodeAll()
2018-09-11 03:35:33 +00:00
{
InitDictionary();
2018-09-11 21:17:12 +00:00
Sentences.ForEach(sent => Encode(sent));
//Parallel.ForEach(Sentences, sent => Encode(sent));
return Words;
2018-09-11 03:35:33 +00:00
}
private List<string> InitDictionary()
2018-09-11 03:35:33 +00:00
{
if (Words == null)
2018-09-11 03:35:33 +00:00
{
2018-09-13 04:33:34 +00:00
// Words = "shuffle,pause,resume,next,stop,previous,continue,mode,repeat,back,music,play,enough,off,them,playlist,skip,restart,favourites,on,add,go,again,turn,save,my,station,favourite,start,by,playing,please,now,running,move".Split(',').ToList();
2018-09-11 03:35:33 +00:00
}
return Words;
2018-09-11 03:35:33 +00:00
}
}
}