2010-03-31 6 views
6

Câu hỏi của tôi tóm lại: Có ai biết một số TwitterAnalyzer hoặc TwitterTokenizer cho Lucene?Mã hóa các bài đăng trên Twitter trong Lucene

phiên bản chi tiết hơn:

Tôi muốn đánh chỉ mục một số tweets trong Lucene và giữ các điều khoản như @user hoặc #hashtag nguyên vẹn. StandardTokenizer không hoạt động vì nó loại bỏ dấu chấm câu (nhưng nó thực hiện các công cụ hữu ích khác như giữ tên miền, địa chỉ email hoặc nhận dạng từ viết tắt). Làm thế nào tôi có thể có một máy phân tích mà tất cả mọi thứ StandardTokenizer làm nhưng không chạm vào các điều khoản như @user và #hashtag?

Giải pháp hiện tại của tôi là xử lý trước văn bản tweet trước khi cho nó vào máy phân tích và thay thế các ký tự bằng các chuỗi chữ số khác. Ví dụ:

String newText = newText.replaceAll("#", "hashtag"); 
newText = newText.replaceAll("@", "addresstag"); 

Thật không may phương pháp này vi phạm địa chỉ email hợp pháp nhưng tôi có thể sống với điều đó. Cách tiếp cận đó có hợp lý không?

Cảm ơn trước!

AMAC

+0

giải pháp cuối cùng của bạn sẽ như thế nào? – Karussell

+2

nếu bạn cần một giải pháp cho solr, điều này có thể giúp: https://issues.apache.org/jira/browse/SOLR-2059 và một cái gì đó như "# => ALPHA" "@ => ALPHA" – Karussell

Trả lời

5

Các StandardTokenizer và StandardAnalyzer cơ bản vượt qua thẻ của bạn thông qua một StandardFilter (mà loại bỏ tất cả các loại nhân vật từ thẻ tiêu chuẩn của bạn như 's ở hai đầu của từ), tiếp theo là một bộ lọc Chữ thường (chữ thường lời nói của bạn) và cuối cùng là một StopFilter. Điều cuối cùng loại bỏ những từ không đáng kể như "as", "in", "for", v.v.

Những gì bạn có thể dễ dàng thực hiện để bắt đầu là triển khai trình phân tích của riêng bạn thực hiện giống như StandardAnalyzer nhưng sử dụng Trình tạo trắng như mục đầu tiên xử lý luồng đầu vào.

Để biết thêm thông tin chi tiết một trong những hoạt động bên trong của máy phân tích bạn có thể có một cái nhìn qua here

+0

Cảm ơn bạn. Tôi đã thử triển khai Trình phân tích của riêng mình bằng cách sử dụng Trình tạo trắng (WhitespaceTokenizer) thay vì StandardTokenizer. Nhưng điều đó để lại tên máy chủ lưu trữ, địa chỉ email và một số nội dung khác không được công nhận và được mã hóa sai. Tôi muốn xử lý luồng bằng TwitterTokenizer tùy chỉnh của tôi (xử lý @s và #s không có gì khác), sau đó nạp luồng kết quả vào StandardTokenizer và tiếp tục từ đó. Tuy nhiên, theo như tôi hiểu một Analyzer chỉ có thể có một Tokenizer ở đầu chuỗi. –

+1

Một cách tiếp cận khác có thể là sử dụng PerFieldAnalyzerWrapper và thực hiện lần thứ hai thông qua nội dung để tìm kiếm các thẻ băm và tham chiếu người dùng một cách rõ ràng và đặt chúng vào một trường riêng biệt của tài liệu của bạn (ví dụ: 'thẻ' và 'trả lời'). Các trình phân tích cho trường đó chỉ trả về mã thông báo cho các lần xuất hiện của #tag và @user tương ứng. – Thomas

+0

Vâng, điều đó có ý nghĩa. Cảm ơn! –

0

API Twitter có thể được trả về để trả lại tất cả Tweet, Bios v.v. "các thực thể" (hashtags, userIds, url vv) đã được phân tích cú pháp ra khỏi nội dung thành các bộ sưu tập.

https://dev.twitter.com/docs/entities

Vì vậy, không được bạn chỉ cần tìm kiếm một cách để tái làm điều gì đó mà các folks tại Twitter đã thực hiện cho bạn?