2014-06-09 18 views
5

Tôi đang tạo một trình phân loại mà tôi muốn lưu trữ dưới dạng dịch vụ giành chiến thắng C#, để lộ điểm cuối tôi có thể gọi từ xa bằng văn bản mà tôi muốn phân loại. Tôi hiện đang có một công việc sử dụng ironpython và bộ công cụ ngôn ngữ tự nhiên, sử dụng động cơ C# 4.0. mã như thế này:Gọi Numpy và khám phá từ C#

var py = Python.CreateEngine(); 
dynamic script = py.ImportModule("MyPythonScript"); 
classifier = script.GetClassifier(); 
//build features etc, then train 
trainedClassifier = classifier.TrainClassifier(featureSet); 

Trình phân loại tự đào khi khởi động (như trên) và tôi gọi phân loại thời gian thực bằng văn bản mà tôi muốn phân loại.

Vấn đề của tôi là tôi muốn sử dụng các trình phân loại và các vectơ trong tìm hiểu.

Ironpython không hỗ trợ tìm hiểu theo liên kết này. (Can scikit be used from IronPython?)

Ai đó có thể đề xuất phương pháp tốt nhất cho điều này? Tôi mở để gợi ý, nhưng tôi cần phải giữ phân loại được đào tạo trong bộ nhớ, như đào tạo nó trên mọi cuộc gọi sẽ bị cấm.

Nghiên cứu của tôi đã mang lại những điều sau đây.

  1. IronPython 2.7 có thể hỗ trợ gọn gàng và scipy, (https://www.enthought.com/repo/.iron/). Mặc dù khi tôi cố gắng để chạy này tôi có một vấn đề với NumpyDotNet.dll không được tìm thấy. Tôi đã từ bỏ như scikit-học có lẽ sẽ không làm việc với IronPython anyway.

  2. Tôi đã xem 'python for .net' (http://pythonnet.github.io/), nhưng chưa thể gọi từ C#. Tôi tham khảo Python.Runtime.dll nhưng có cùng một vấn đề tham chiếu như anh chàng này (https://stackoverflow.com/questions/22844519/missing-py-gil-from-c-pythonnet-example)

  3. Có ai đã sử dụng sharpkit.learn. (https://github.com/foreverzet/Sharpkit.Learn). Tôi đặc biệt cần tuyến tính SVM và TfidfVectorizer?

  4. Tôi đang mở các giải pháp khác để chạy tập lệnh python. Tuy nhiên, tôi sẽ cần phải cache bộ phân loại được đào tạo và không thể liên tục đào tạo nó.

Tôi mở cho tất cả các ý tưởng và mọi trợ giúp được đánh giá cao. cảm ơn bạn.

+0

Nếu bạn không thể làm mọi thứ hoạt động trong IronPython (như bạn đã thiết lập), giải pháp của tôi là sử dụng CPython "thuần túy" (ví dụ như phân phối anaconda) và giao diện sử dụng các cơ chế IPC khác nhau cho bạn . Đơn giản nhất là một SimpleHTTPServer chạy cục bộ, các tùy chọn phức tạp hơn có sẵn trong khóa học. – deets

+0

Xin cảm ơn vì đã trả lời. Tôi rất vui khi viết một ứng dụng cpython 2.7 đầy đủ. Tôi đã không thực hiện một trước - python của tôi được giới hạn để prototyping với kịch bản. Tôi đã thấy làm thế nào tôi có thể lưu trữ python như một cửa sổ dịch vụ (http://www.chrisumbel.com/article/windows_services_in_python), tôi có thể sử dụng pyodbc để truy cập dữ liệu, thêm phong nha đăng nhập, OOP vv. Tôi không chắc chắn là cách lưu trữ một webservice JSON an toàn. Flask/CherryPy/web.py đang được đề cập nhưng không chắc chắn nếu điều này sẽ làm việc trên các cửa sổ. Cái này chắc sẽ rất vui! – user3661633

+0

Đừng sợ :) Tôi sẽ đề nghị chai (đó là một tập tin, điều tối thiểu nhất bạn có thể có), pyodbc dường như không cần thiết cho tôi. Chỉ cần bắt đầu bằng cách đặt thingy phân loại của bạn thành một gói, thêm chai và thử kết nối các cuộc gọi đến trình phân loại của bạn thông qua một phương pháp web. Chỉ cần gọi nó từ bên trong trình duyệt (hoặc thậm chí tốt hơn, viết đơn vị kiểm tra). Một khi bạn cảm thấy thoải mái với thiết lập này, kết nối C#, và sau đó cuối cùng chuyển đổi toàn bộ điều vào một dịch vụ. – deets

Trả lời

2

đánh dấu câu hỏi này là đã trả lời theo các nhận xét ở trên. Tôi không thể tổ chức scikit-learning trong python sắt và thay vào đó đã viết một dịch vụ bằng cách sử dụng cpython.

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