2014-06-09 8 views
5

buduję klasyfikator, że chcemy zorganizować jako C# wygrana usługi, wystawiając punkt końcowy mogę zadzwonić zdalnie z tekstem pragnę sklasyfikować. Obecnie mam jednego działającego przy użyciu ironpython i zestaw narzędzi języka naturalnego, przy użyciu dynamiki C# 4.0. Kod tak:Wywołanie Numpy i scikit-learn z C#

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

Klasyfikator szkoli się na starcie (jak wyżej) i wywołać w czasie rzeczywistym klasyfikatora z tekstem pragnę sklasyfikować.

Mój problem jest chcę użyć klasyfikatorów i vectorizers w scikit-learn.

IronPython nie obsługuje scikit-learn, jak na ten link. (Can scikit be used from IronPython?)

Może ktoś sugerują najlepszej metody dla tego? Jestem otwarty na sugestie, ale muszę trzymać wyszkolonego klasyfikatora w pamięci, ponieważ szkolenie przy każdym wywołaniu będzie wygórowane.

Moje badania przyniosły następujące.

  1. IronPython 2.7 może obsługiwać numpy i scipy, (https://www.enthought.com/repo/.iron/). Chociaż kiedy próbuję uruchomić to mam problem z nie znalezieniem NumpyDotNet.dll. Poddałem się, jak nauczyłem się scikit, prawdopodobnie nie będę pracował z IronPython.

  2. Sprawdziłem "python dla .net" (http://pythonnet.github.io/), ale nie mogłem wywołać go z C#. Odwołuję się do Python.Runtime.dll, ale mam ten sam numer odniesienia, jak ten facet (https://stackoverflow.com/questions/22844519/missing-py-gil-from-c-pythonnet-example)

  3. Czy ktoś użył sharpkit.learn. (https://github.com/foreverzet/Sharpkit.Learn). Potrzebuję Linear SVM i TfidfVectorizer?

  4. jestem otwarty na inne rozwiązania na uruchomienie skryptu Pythona. Muszę jednak buforować wyszkolony klasyfikator i nie mogę go wielokrotnie szkolić.

Jestem otwarty na wszelkie pomysły i każdą pomoc docenioną. dziękuję.

+0

Jeśli nie można zrobić rzeczy działają w IronPython (jak wydaje się ustalić), moje rozwiązanie byłoby użycie „czystego” CPython (np dystrybucji anakonda) oraz interfejs do niego za pomocą różnych mechanizmów IPC dostępne dla Ciebie . Najprostszy z nich to SimpleHTTPServer działający lokalnie, oczywiście dostępne są bardziej złożone opcje. – deets

+0

Cześć dzięki za odpowiedź. Z radością piszę pełną wersję aplikacji cpython 2.7. Nie zrobiłem tego wcześniej - mój pyton ogranicza się do tworzenia prototypów za pomocą skryptów. Widziałem, jak mogę obsłużyć python jako usługę Windows (http://www.chrisumbel.com/article/windows_services_in_python), mogę używać pyodbc do dostępu do danych, dodając przyzwoite rejestrowanie, OOP itp. Gdzie jestem niepewny jak zorganizować spokojny serwis internetowy JSON. Flask/CherryPy/web.py są wymienione, ale nie wiem, czy to będzie działać w systemie Windows. Bedzie fajnię! – user3661633

+0

Nie bój się :) Proponuję butelkę (to jeden plik, najbardziej minimalna rzecz, jaką możesz mieć), pyodbc nie wydaje się być dla mnie konieczny. Zacznij od umieszczenia swojej klasyki w paczce, dodaj butelkę i spróbuj połączyć się z twoim klasyfikatorem za pomocą metody internetowej. Po prostu wywołaj go z poziomu przeglądarki (lub jeszcze lepiej, napisz testy jednostkowe). Gdy poczujesz się komfortowo z tą konfiguracją, połącz C#, a następnie w końcu przekształć całość w usługę. – deets

Odpowiedz

2

zaznaczając to pytanie jako odpowiadającą na uwagi powyżej. Nie mogłem obsługiwać scikit-learn w żelaznym pythonie i zamiast tego napisałem usługę za pomocą cpython.