2013-02-18 11 views
18

Tôi chỉ mới bắt đầu chơi đùa với NSLinguisticTagger dựa mã của tôi trên blog này: NSLinguisticTagger @ NSHipster.comObjective-C: NSLinguisticTagger "new york" vs "New York"

NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation | NSLinguisticTaggerJoinNames; 
NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes: [NSLinguisticTagger availableTagSchemesForLanguage:@"en"] options:options]; 
tagger.string = question; 
[tagger enumerateTagsInRange:NSMakeRange(0, [question length]) scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass options:options usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { 
NSString *token = [question substringWithRange:tokenRange]; 
NSLog(@"%@: %@", token, tag); }]; 

Khi tôi chạy này với question = @"Weekend in New York", "New York" được gắn thẻ như PlaceName tuyệt vời. Nhưng khi tôi chạy điều này với question = @"Weekend in new york", "new" được gắn thẻ là "Adjective""york" được gắn thẻ là PlaceName. Có cách nào để giải quyết vấn đề này sao cho "New York""new york" cả hai đều được gắn thẻ là PlaceName?

Tôi hoàn toàn mới đối với ngôn ngữ học này.

+0

"Cuối tuần ở New York" và "Cuối tuần ở New York" thực sự có 2 ý nghĩa khác nhau (York cũng là một thành phố). Các Tagger chọn một trong những ông nghĩ là đúng khi sử dụng "Cuối tuần trong new york". Có lẽ đặt cược tốt nhất của bạn là sửa chính tả chính tả, nếu điều đó là có thể. – Daniel

+2

điều này là không thể, từ quan điểm ngữ pháp "new york" và "New York" là hoàn toàn khác nhau – tkanzakic

+0

Có cách nào để áp dụng tự động sửa hồi tố thành chuỗi không? Ví dụ: nếu tôi nhập "cuối tuần ở new york" trên thiết bị, nó sẽ tự động sửa thành "Cuối tuần ở New York" khi tôi nhấn thanh dấu cách sau "york". –

Trả lời

2

Điều này đã được đề cập trong các nhận xét, nhưng vẫn muốn chỉ ra điều này. NSLinguisticTagger tin rằng "New York" và "new york" là khác nhau - bởi vì chúng. Thủ đô N nói với nó rằng đó là một danh từ thích hợp. Theo hiểu biết của tôi, không có gì trong NSLinguisticTagger có thể thay đổi hành vi này.

Tuy nhiên, những gì bạn có thể làm là dựa vào tự động sửa iOS. Chỉ cần đảm bảo rằng trường văn bản có giá trị được nhập đã bật tự động sửa và nó sẽ tự động sửa "new york" thành "New York" và các lần xuất hiện tương tự. Nếu autocorrect không bắt được điều này, thì tôi sẽ cố gắng tìm một số thư viện khác để phân tích ngôn ngữ.

Tự động sửa lỗi lại đã được đưa vào iOS (với một gia hạn nhất định), do đó sẽ đủ tốt để sửa "new york" thành "New York". Nếu bạn muốn sửa toàn bộ câu (ví dụ: "cuối tuần ở new york" thành "Cuối tuần ở New York"), bạn sẽ cần tự mình thực hiện chức năng đó. Điều này không quá khó khăn, vì chỉ có một vài quy tắc ngữ pháp đơn giản mà bạn phải tuân theo và nhiều thứ sẽ được tự động sửa lại.

Hy vọng điều này sẽ giúp, cho tôi biết nếu bạn cần thêm thông tin.

3

Lấy chủ đề này thêm một chút. Viết hoa đúng tên và họ là yêu cầu để NSLinguisticTagger xác định tên.

Sau vài giờ thất vọng, tôi quyết định tạo các thử nghiệm khác nhau bằng chữ hoa, viết thường và viết hoa chữ hoa.

Các NSLinguisticTagger có kết quả khác nhau ở hầu hết các xét nghiệm

Khi NSLinguisticTagger phân tích một chuỗi trong vốn hợp hầu hết các danh từ được gắn thẻ như personalName. wtf?

Rất bực bội.

Bài học tôi muốn chia sẻ là trình gắn thẻ NSLinguistic có thể đoán tại các thẻ mà nó đặt trên các từ, nhưng cuối cùng nó chỉ là một đánh giá ngữ pháp của các từ. Việc đánh giá phụ thuộc vào các cấu trúc ngôn ngữ thích hợp như vị trí từ và liệu từ đó có được viết hoa hay không.

Tôi vẫn đang tìm kiếm nó một lớp học hữu ích, nhưng đạo đức của bài đăng này là "Be Proper".

Khi phân tích cú pháp văn bản đôi khi chúng tôi lập trình có khuynh hướng chơi với việc viết hoa và giảm giá để đơn giản hóa công việc của chúng tôi. Chúng tôi vẫn có thể làm điều này, nhưng chỉ cần nhớ rằng vỏ bọc từ không thay đổi kết quả NSLinguisticTagger.