سؤال

هذا هو في الواقع آلة التعلم تصنيف المشكلة ولكن أتصور أن هناك جيدة تماما سريعة وقذرة طريقة للقيام بذلك.أريد أن خريطة سلسلة واصفا فريق اتحاد كرة القدم الأميركي ، مثل "سان فرانسيسكو" أو "49" أو "سان فرانسيسكو 49ers" أو "SF الأربعين niners" ، و اسم الفريق.(هناك 32 فريقا اتحاد كرة القدم الأميركي لا يعني فقط العثور على أقرب 32 صناديق لوضع سلسلة معينة في.)

واردة السلاسل ليست في الواقع تماما التعسفي (أنهم من البيانات المنظمة مصادر مثل هذا: http://www.repole.com/sun4cast/stats/nfl2008lines.csv) لذلك ليس من الضروري التعامل مع كل مجنون الزاوية الحالة كما في 49ers المثال أعلاه.

وأود أن أضيف أيضا أنه في حالة أي شخص يعرف من مصدر البيانات يحتوي على moneyline احتمالات فيغاس وكذلك اللعبة الفعلية نتائج السنوات القليلة الماضية من مباريات كرة القدم ، من شأنه أن يلغي الحاجة إلى هذا.السبب في أنني في حاجة إلى مشكة تطابق هذين المتباينة مجموعات البيانات ، مع خلاف واحد مع النتائج:

أفكار أفضل وأكثر parsable ، ومصادر البيانات هي موضع ترحيب للغاية!

وأضاف:فرعية مطابقة الفكرة قد تكفي هذه البيانات ؛ وذلك بفضل!يمكن أن يكون قليلا أكثر قوة من خلال اختيار اسم الفريق مع أقرب levenshtein المسافة ؟

هل كانت مفيدة؟

المحلول

هنا شيء الكثير قوية حتى التعسفي إدخال المستخدم ، على ما أعتقد.أولا خريطة كل فريق (أنا باستخدام 3-رسالة الكود كما الكنسي اسم لكل فريق) بالكامل الإصدار المنصوص عليها في المدينة و اسم الفريق وكذلك أي ألقاب في قوسين بين المدينة و اسم الفريق.

Scan[(fullname[First@#] = #[[2]])&, {
  {"ari", "Arizona Cardinals"},                 {"atl", "Atlanta Falcons"}, 
  {"bal", "Baltimore Ravens"},                  {"buf", "Buffalo Bills"}, 
  {"car", "Carolina Panthers"},                 {"chi", "Chicago Bears"}, 
  {"cin", "Cincinnati Bengals"},                {"clv", "Cleveland Browns"}, 
  {"dal", "Dallas Cowboys"},                    {"den", "Denver Broncos"}, 
  {"det", "Detroit Lions"},                     {"gbp", "Green Bay Packers"}, 
  {"hou", "Houston Texans"},                    {"ind", "Indianapolis Colts"}, 
  {"jac", "Jacksonville Jaguars"},              {"kan", "Kansas City Chiefs"}, 
  {"mia", "Miami Dolphins"},                    {"min", "Minnesota Vikings"}, 
  {"nep", "New England Patriots"},              {"nos", "New Orleans Saints"}, 
  {"nyg", "New York Giants NYG"},               {"nyj", "New York Jets NYJ"}, 
  {"oak", "Oakland Raiders"},                   {"phl", "Philadelphia Eagles"}, 
  {"pit", "Pittsburgh Steelers"},               {"sdc", "San Diego Chargers"}, 
  {"sff", "San Francisco 49ers forty-niners"},  {"sea", "Seattle Seahawks"}, 
  {"stl", "St Louis Rams"},                     {"tam", "Tampa Bay Buccaneers"}, 
  {"ten", "Tennessee Titans"},                  {"wsh", "Washington Redskins"}}]

ثم في أي سلسلة العثور على أطول subsequence المشترك لكل من الأسماء الكاملة من الفرق.أن تعطي الأفضلية سلاسل مطابقة في بداية أو نهاية (على سبيل المثال ، "سيارة" يجب أن تطابق "كارولينا الفهود" بدلا من "أريزونا الكرادلة") ساندويتش كل المدخلات سلسلة الأسماء الكاملة بين المساحات.أيهما فريق الاسم الكامل له [كذا:] أطول أطول-مشترك-subsequence مع سلسلة الإدخال هو الفريق راجعون.وهنا الرياضيات تنفيذ الخوارزمية:

teams = keys@fullnames;

(* argMax[f, domain] returns the element of domain for which f of that element is
   maximal -- breaks ties in favor of first occurrence. *)
SetAttributes[argMax, HoldFirst];
argMax[f_, dom_List] := Fold[If[f[#1] >= f[#2], #1, #2] &, First@dom, Rest@dom]

canonicalize[s_] := argMax[StringLength@LongestCommonSubsequence[" "<>s<>" ", 
                                 " "<>fullname@#<>" ", IgnoreCase->True]&, teams]

نصائح أخرى

الفحص السريع عن طريق البصر يدل على أن كل من مجموعات البيانات التي تحتوي على فرق مواقع (أي"مينيسوتا").واحد منهم فقط لديه فرق أسماء.هذا هو قائمة واحدة تبدو مثل:

Denver
Minnesota
Arizona
Jacksonville

والآخر يبدو

Denver Broncos
Minnesota Vikings
Arizona Cardinals
Jacksonville Jaguars

يبدو في هذه الحالة بعض بسيطة جدا فرعية مطابقة يفعل ذلك.

إذا كنت تعرف كل من المصدر والوجهة الأسماء ، ثم تحتاج فقط إلى رسم خريطة لها.في php, يمكنك فقط استخدام مجموعة مفاتيح من مصدر البيانات والقيم من جهة.ثم يمكنك الرجوع إليها مثل:

$map = array('49ers' => 'San Francisco 49ers',
             'packers' => 'Green Bay Packers');

foreach($incoming_name as $name) {
   echo $map[$name];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top