(很抱歉,如果標題是順便一完整的紅鯡魚)反向索引
背景:
我開發地圖所有的鳴叫的在世界上真正的使用Twitter Streaming API和ASP.NET SignalR。我使用Tweetinvi C#Twitter庫異步地使用SignalR將推文推送到瀏覽器。一切都按預期工作 - 請參閱http://dev.wherelionsroam.co.uk瞭解它。
開發的下一步包括使用斯坦福自然語言解析庫(http://nlp.stanford.edu/software/corenlp.shtml),特別是命名實體識別器(也稱爲CRFClassifier)解析每條推文的文本數據,以便從每條推文中提取有意義的元數據即提到的人物,地點和組織)。期望的結果是,我將能夠確定許多人正在討論的人物,地點和組織(類似於「趨勢」概念),並將其廣播給使用SignalR的所有客戶。我知道Twitter API有GET trends
方法,但這不會有什麼樂趣嗎?!
這裏是我的應用程序的主要類型:
主要類型:
TweetModel.cs(包含所有的關於鳴叫廣播將其從流API的信息):
public class TweetModel
{
public string User { get; set; }
public string Text { get; set; }
public DateTime CreatedAt { get; set; }
public string ImageUrl { get; set; }
public double Longitude { get; set; }
public double Latitude { get; set; }
public string ProfileUrl { get; set; }
// This field is set later during Tokenization/Named Entity Recognition
public List<NamedEntity> entities = new List<NamedEntity>();
}
摘要NamedEntity類:
public abstract class NamedEntity
{
/// <summary>
/// Abstract modelling class for NER tagging - overridden by specific named entities. Used here so that all classes inherit from a single base class - polymorphic list
/// </summary>
protected string _name;
public abstract string Name { get; set; }
}
Person類,它覆蓋抽象NamedEntity類的類的一個示例:
public class Person : NamedEntity
{
public override string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
public string entityType = "Person";
}
的TweetParser類:
public class TweetParser
{
// Static List to hold all of tweets (and their entities) - tweets older than 20 minutes are cleared out
public static List<TweetModel> tweets = new List<TweetModel>();
public TweetParser(TweetModel tweet)
{
ProcessTweet(tweet);
// Removed all of NER logic from this class
}
}
的命名實體識別器的說明:
的NER識別庫工作的方式是將句子中的單詞用「PERSON」作爲「Luis Suarez」或「PLACE」作爲「紐約」的標籤進行分類。此信息存儲在子類中NamedEntity類的,這取決於由NER庫已被歸因於這個詞是什麼類型的標籤(選擇PERSON
,LOCATION
,ORGANISATION
)
問題:
我的問題是,考慮到可能有多個版本的「路易斯蘇亞雷斯」(即路易斯蘇亞雷斯,路易斯蘇亞雷斯),這兩個版本都將在他們自己的不同NamedEntity實例中定義(在List<NamedEntity>
實例中,然後在TweetModel
實例中),將術語「Luis Suarez」的匹配實例分組的最佳方式是什麼呃來自所有推文,同時仍然保留親子關係TweetModel
>List<NamedEntity>
。我被告知這實際上是一個倒排索引,但我不確定這個人有多瞭解!
可視化結構:
我真的很抱歉,如果這個問題還不清楚;我不能用比這更簡潔的表達來表達它!至於完整的src到目前爲止,請參閱https://github.com/adaam2/FinalUniProject
所以你想要一個結構,其中Tweets包含名稱,同時一個名稱包含Tweets?這聽起來像是一個倒排索引。然後,你對字符串的模糊比較是第二個要求,第一個要求會讓第一個要求複雜化。 –
@NathanCooper實際上是的。就模糊字符串匹配而言,我使用了一個模糊匹配庫,它返回Levenshtein距離(返回double類型的值),以確定字符串需要與另一個字符串相同的編輯次數。我認爲編輯次數的任意最大值爲1或2次編輯 – adaam
您想要的是多對多關係,其中TweetModel具有許多NamedEntities,而NamedEntity存在於Many TweetModels中。 –