2011-11-20 31 views
9

Tôi đang cố gắng tìm ra một trình phân tích cú pháp để chơi bóng đá. Tôi sử dụng thuật ngữ "ngôn ngữ tự nhiên" ở đây rất lỏng lẻo vì vậy xin vui lòng chịu với tôi như tôi biết ít hoặc không có gì về lĩnh vực này.Trình phân tích cú pháp ngôn ngữ tự nhiên để phân tích cú pháp dữ liệu phát theo từng môn thể thao

Dưới đây là một số ví dụ về những gì tôi đang làm việc với (Format: TIME | XUỐNG & QUẬN | OFF_TEAM | MÔ TẢ):

04:39|4th and [email protected]|Dal|Mat McBriar punts for 32 yards to NYJ14. Jeremy Kerley - no return. FUMBLE, recovered by NYJ.| 
04:31|1st and [email protected]|NYJ|Shonn Greene rush up the middle for 5 yards to the NYJ21. Tackled by Keith Brooking.| 
03:53|2nd and [email protected]1|NYJ|Mark Sanchez rush to the right for 3 yards to the NYJ24. Tackled by Anthony Spencer. FUMBLE, recovered by NYJ (Matthew Mulligan).| 
03:20|1st and [email protected]|NYJ|Shonn Greene rush to the left for 4 yards to the NYJ37. Tackled by Jason Hatcher.| 
02:43|2nd and [email protected]|NYJ|Mark Sanchez pass to the left to Shonn Greene for 7 yards to the NYJ44. Tackled by Mike Jenkins.| 
02:02|1st and [email protected]|NYJ|Shonn Greene rush to the right for 1 yard to the NYJ45. Tackled by Anthony Spencer.| 
01:23|2nd and [email protected]|NYJ|Mark Sanchez pass to the left to LaDainian Tomlinson for 5 yards to the 50. Tackled by Sean Lee.| 

Tính đến bây giờ, tôi đã viết một phân tích cú pháp câm mà xử lý tất cả các công cụ dễ dàng (playID, quý, thời gian, xuống & khoảng cách, nhóm tấn công) cùng với một số tập lệnh đi và nhận dữ liệu này và vệ sinh nó thành định dạng ở trên. Một dòng đơn được chuyển thành đối tượng "Phát" được lưu trữ vào cơ sở dữ liệu.

Phần khó khăn ở đây (ít nhất là đối với tôi) đang phân tích cú pháp mô tả của vở kịch. Dưới đây là một số thông tin mà tôi muốn trích xuất từ ​​chuỗi:

chuỗi Ví dụ:

"Mark Sanchez pass to the left to Shonn Greene for 7 yards to the NYJ44. Tackled by Mike Jenkins." 

Kết quả:

turnover = False 
interception = False 
fumble = False 
to_on_downs = False 
passing = True 
rushing = False 
direction = 'left' 
loss = False 
penalty = False 
scored = False 
TD = False 
PA = False 
FG = False 
TPC = False 
SFTY = False 
punt = False 
kickoff = False 
ret_yardage = 0 
yardage_diff = 7 
playmakers = ['Mark Sanchez', 'Shonn Greene', 'Mike Jenkins'] 

Logic mà tôi đã cho phân tích cú pháp ban đầu của tôi đã đi một cái gì đó như thế này :

# pass, rush or kick 
# gain or loss of yards 
# scoring play 
    # Who scored? off or def? 
    # TD, PA, FG, TPC, SFTY? 
# first down gained 
# punt? 
# kick? 
    # return yards? 
# penalty? 
    # def or off? 
# turnover? 
    # INT, fumble, to on downs? 
# off play makers 
# def play makers 

Mô tả có thể nhận được nhiều lông (nhiều fumbles & phục hồi với hình phạt, vv) và tôi đã tự hỏi nếu tôi có thể tận dụng lợi thế của một số mô-đun NLP ra khỏi đó. Rất có thể tôi sẽ dành một vài ngày trên một máy nhà nước câm/tĩnh như trình phân tích cú pháp thay vào đó, nhưng nếu có ai có đề xuất về cách tiếp cận nó bằng các kỹ thuật NLP, tôi muốn nghe về chúng.

+9

Với chủ đề câu hỏi, tôi thấy thú vị là công cụ đánh dấu cú pháp SO làm nổi bật tất cả tên người ... – Jon

Trả lời

4

Tôi nghĩ pyparsing sẽ rất hữu ích ở đây.

Văn bản nhập văn bản của bạn trông rất thường xuyên (không giống như ngôn ngữ tự nhiên thực), và pyparsing là rất tốt ở công cụ này. bạn nên có một cái nhìn vào nó.

Ví dụ để phân tích các câu sau đây:

Mat McBriar punts for 32 yards to NYJ14. 
Mark Sanchez rush to the right for 3 yards to the NYJ24. 

Bạn sẽ xác định một câu phân tích với một cái gì đó tương tự (tìm kiếm cú pháp chính xác trong tài liệu):

name = Group(Word(alphas) + Word(alphas)).setResultsName('name') 

action = Or(Exact("punts"),Exact("rush")).setResultsName('action') + Optional(Exact("to the")) + Or(Exact("left"), Exact("right"))) 

distance = Word(number).setResultsName("distance") + Exact("yards") 

pattern = name + action + Exact("for") + distance + Or(Exact("to"), Exact("to the")) + Word() 

Và pyparsing sẽ phá vỡ chuỗi sử dụng mô hình này. Nó cũng sẽ trả về một từ điển với tên các mục, hành động và khoảng cách - được trích xuất từ ​​câu.

+0

Tôi sẽ kiểm tra và báo cáo lại, cảm ơn. – Jon

0

Tôi tưởng tượng pyparsing sẽ hoạt động khá tốt, nhưng các hệ thống dựa trên quy tắc khá dễ vỡ. Vì vậy, nếu bạn đi xa hơn bóng đá, bạn có thể gặp rắc rối.

Tôi nghĩ giải pháp tốt hơn cho trường hợp này sẽ là một phần của trình gắn thẻ lời nói và từ vựng (đọc từ điển) tên người chơi, vị trí và thuật ngữ thể thao khác. Đổ nó vào công cụ học máy yêu thích của bạn, tìm ra các tính năng tốt và tôi nghĩ rằng nó sẽ làm khá tốt.

NTLK là một nơi tốt để bắt đầu cho NLP. Thật không may, lĩnh vực này không phải là rất phát triển và không có một công cụ ra có đó là như bam, vấn đề được giải quyết, dễ dàng cheesy.

Các vấn đề liên quan