2008-10-20 37 views
21

Tôi đang làm việc trên một dự án mà tôi cần phân tích một trang văn bản và tập hợp các trang văn bản để xác định các từ chi phối. Tôi muốn biết nếu có một thư viện (thích C# hoặc java) sẽ xử lý việc nâng hạng nặng cho tôi. Nếu không, có một thuật toán hoặc nhiều thuật toán sẽ đạt được mục tiêu của tôi bên dưới.Thuật toán hoặc thư viện để phân tích văn bản, cụ thể: từ, cụm từ trên văn bản và tập hợp văn bản

Điều tôi muốn làm tương tự với các đám mây từ được tạo từ url hoặc nguồn cấp dữ liệu rss mà bạn tìm thấy trên web, ngoại trừ tôi không muốn hiển thị. Chúng được sử dụng tất cả các thời gian để phân tích các bài phát biểu ứng viên tổng thống để xem những gì các chủ đề hoặc từ được sử dụng nhiều nhất là.

Biến chứng, là tôi cần thực hiện việc này trên hàng nghìn tài liệu ngắn, sau đó là các bộ sưu tập hoặc danh mục của các tài liệu này.

Kế hoạch ban đầu của tôi là phân tích cú pháp tài liệu, sau đó lọc các từ phổ biến - của, anh ấy, cô ấy, v.v. Sau đó đếm số lần các từ còn lại hiển thị trong văn bản (và bộ sưu tập/danh mục tổng thể)).

Vấn đề là trong tương lai, tôi muốn xử lý các hình thức gốc, số nhiều, vv .. Tôi cũng muốn xem liệu có cách nào để xác định các cụm từ quan trọng hay không. (Thay vì đếm một từ, tổng số cụm từ gồm 2-3 từ cùng nhau)

Bất kỳ hướng dẫn nào về chiến lược, thư viện hoặc thuật toán sẽ được đánh giá cao.

Trả lời

17

Một tùy chọn cho những gì bạn đang làm là tần suất cụm từ để đảo ngược tần suất tài liệu hoặc tf-idf. Các thuật ngữ mạnh nhất sẽ có trọng số cao nhất theo tính toán này. Kiểm tra xem có ở đây không: http://en.wikipedia.org/wiki/Tf-idf

Tùy chọn khác là sử dụng thứ gì đó như phân loại vịnh ngây thơ sử dụng các từ làm đối tượng địa lý và tìm các tính năng mạnh nhất trong văn bản để xác định loại tài liệu. Điều này sẽ làm việc tương tự với một trình phân loại entropy tối đa.

Theo như công cụ để làm điều này, công cụ tốt nhất để bắt đầu với sẽ NLTK, thư viện với sự tài liệu và hướng dẫn Python: http://nltk.sourceforge.net/

Đối với Java, hãy thử OpenNLP: http://opennlp.sourceforge.net/

Đối với các cụm từ công cụ, hãy xem xét tùy chọn thứ hai mà tôi cung cấp bằng cách sử dụng bigrams và trigrams làm tính năng hoặc thậm chí là các thuật ngữ trong tf-idf.

Chúc may mắn!

5

Để thêm vào câu trả lời Robert Elwell của:

  • bắt nguồn và sụp đổ hình thức văn bản. Một phương pháp đơn giản bằng tiếng Anh là sử dụng Porter Stemming trên các dạng từ có dạng chữ thấp hơn.
  • cụm từ cho "từ chung" là "từ dừng" hoặc "danh sách dừng"
  • Đọc qua sách NLTK như được đề xuất sẽ giải thích rất nhiều vấn đề giới thiệu này.
  • một số vấn đề bạn phải giải quyết là phân tích cú pháp câu (để cụm từ bigram và cụm từ không theo đường biên), chia nhỏ câu thành thẻ, và quyết định làm gì về biểu mẫu sở hữu chẳng hạn.

Không có nội dung nào trong số này bị cắt rõ ràng, cũng không có bất kỳ nội dung nào có "câu trả lời đúng". Xem thêm các thẻ SO "nlp" và "ngôn ngữ tự nhiên".

Chúc may mắn! Đây là một dự án không tầm thường.

+0

Tôi đã thêm thẻ "ngôn ngữ tự nhiên" vào bài đăng. –

1

Bạn có thể sử dụng Dịch vụ lập chỉ mục của Windows, đi kèm với SDK nền tảng Windows. Hoặc, chỉ cần đọc phần giới thiệu dưới đây để có cái nhìn tổng quan về NLP.

http://msdn.microsoft.com/en-us/library/ms693179(VS.85).aspx http://i.msdn.microsoft.com/ms693179.wbr-index-create(en-us,VS.85).gif

http://i.msdn.microsoft.com/ms693179.wbr-query-process(en-us,VS.85).gif

+0

Điều đó nghe giống như một gói khá hay. Nice của MS để cho nó đi. –

1

Alrighty. Vì vậy, bạn đã có một tài liệu có chứa văn bản và một tập hợp các tài liệu (một kho văn bản). Có một số cách để làm điều này.

Tôi khuyên bạn nên sử dụng công cụ Lucene (Java) để lập chỉ mục tài liệu của bạn. Lucene hỗ trợ một cấu trúc dữ liệu (Index) duy trì một số tài liệu trong đó. Bản thân tài liệu là cấu trúc dữ liệu có thể chứa "trường" - giả sử, tác giả, tiêu đề, văn bản, v.v. Bạn có thể chọn trường nào được lập chỉ mục và trường nào không được lập chỉ mục.

Thêm tài liệu vào chỉ mục là trivial. Lucene cũng được xây dựng cho tốc độ, và có thể quy mô tuyệt vời.

Tiếp theo, bạn muốn tìm hiểu các điều khoản và tần số. Vì lucene đã tính toán điều này cho bạn trong quá trình lập chỉ mục, bạn có thể sử dụng hàm docFreq và xây dựng hàm tần suất của thuật ngữ của riêng bạn hoặc sử dụng hàm getTermFreqVectors của lớp IndexReader để nhận các điều khoản (và tần số của chúng).

Bây giờ, tùy thuộc vào cách bạn sắp xếp và tiêu chí bạn muốn sử dụng để lọc các từ bạn muốn. Để tìm ra các mối quan hệ, bạn có thể sử dụng một API Java cho thư viện mã nguồn mở wordnet. Để chặn các từ, sử dụng lớp PorterStemFilter của Lucene. Phần quan trọng của cụm từ là phức tạp hơn, nhưng một khi bạn đã đạt được điều này - bạn có thể tìm kiếm các mẹo về cách tích hợp tìm kiếm n-gram vào Lucene (hint).

Chúc may mắn!

0

mô hình MapReduce Kiểm tra để có được số lượng từ và sau đó lấy được các tần số như mô tả trong TF-IDF

Hadoop MapReduce là một khuôn khổ apache có thể được sử dụng cho nhiệm vụ nâng nặng của từ dựa vào nhiều tài liệu. http://hadoop.apache.org/common/docs/current/mapred_tutorial.html

Bạn không thể có một khuôn khổ duy nhất có thể giải quyết tất cả những gì bạn muốn. Bạn phải chọn một sự kết hợp của các khái niệm và khuôn khổ để có được những gì bạn muốn.

0

Tôi cũng muốn xem liệu có cách nào để xác định các cụm từ quan trọng hay không. (Thay vì đếm một từ, tổng số cụm từ là 2-3 từ cùng nhau)

Phần này của vấn đề của bạn được gọi là collocation extraction. (Ít nhất là nếu bạn dùng 'các cụm từ quan trọng' để trở thành cụm từ xuất hiện thường xuyên hơn đáng kể so với tình cờ.) Tôi gave an answer qua tại another SO question về bài toán cụ thể đó.

0

Dường như những gì bạn đang tìm kiếm được gọi là phân cụm/phân loại tài liệu theo nhóm. Bạn sẽ tìm thấy hướng dẫn với tìm kiếm này.

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