(ちなみに、タイトルが完全なニシンである場合は申し訳ありません)
バックグラウンド:
Twitter Streaming API と ASP.NET SignalR を使用して、世界中のすべてのツイートのマップをリアルタイムで作成しています。Tweetinvi C# Twitter ライブラリを使用して、SignalR を使用してブラウザーにツイートを非同期的にプッシュしています。すべてが期待どおりに機能しています - http://dev.wherelionsroam.co.ukを参照してください。
開発の次のステップでは、スタンフォード自然言語解析ライブラリ ( http://nlp.stanford.edu/software/corenlp.shtml )、特に Named Entity Recognizer (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; }
}
抽象 NamedEntity クラスをオーバーライドするクラスの例である Person クラス:
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
}
}
Named Entity Recognizer の説明:
NER 認識ライブラリのしくみは、"Luis Suarez" の "PERSON" や "New York" の "PLACE" などのタグを使用して、文章内の単語を分類することです。PERSON
この情報は、NER ライブラリによって単語に割り当てられたタグのタイプ ( 、LOCATION
、の選択ORGANISATION
)に応じて、NamedEntity クラスのサブクラスに格納されます。
問題:
私の質問は、「Luis Suarez」という用語の複数のバージョンが登場する可能性が高いことを考慮して (つまり、Luis Suarez、Luis Suárez)、どちらも独自の NamedEntity インスタンス (インスタンス内List<NamedEntity>
、>親子関係を維持しながら、すべてのツイートから用語「Luis Suarez」の一致するTweetModel
インスタンスをグループ化する最良の方法は何でしょうか。これは実質的に逆指数であると知らされましたが、この人物がどれほど十分な情報を持っていたかはわかりません!TweetModel
List<NamedEntity>
構造の可視化:
この質問が不明確である場合は、本当に申し訳ありません。これ以上簡潔に表現することはできません。これまでの完全な src については、 https://github.com/adaam2/FinalUniProjectを参照してください。