Coder Social home page Coder Social logo

aspell-python's Introduction

aspell-python - Python bindings for GNU aspell

https://travis-ci.org/WojciechMula/aspell-python.svg?branch=master

GNU Aspell is a leading spelling engine, fast, with many dictionaries available. Take a look at Python Cookbook --- Ryan Kelly have collected links to all python bindings for spellers.

aspell-python is a Python wrapper for GNU Aspell, there are two variants:

  • pyaspell.py --- Python library, that utilize ctypes module; compatible with python3;
  • aspell-python --- C extension, two versions are available, one for Python 2.x, and Python 3.x.

C exension exist in two versions: one compatible with Python 2.x and other with Python 3.x.

Version for Py2 has been tested with Python 2.1, Python 2.3.4 and Python 2.4.1. Probably it works fine with all Python versions not older than 2.0. Version for Py3 has been tested with Python 3.2.

Both libraries are licensed under BSD license

Wojciech Muła, [email protected]

Thanks to:

  • Adam Karpierz for conviencing me to change license from GPL to BSD and for compiling early versions of C extension under Windows
  • Gora Mohanty for reporting a bug.

To build & install module for python2.x please use script setup.2.py, i.e.:

$ python setup.2.py build
$ python setup.2.py install

Module for python3.x is build with setup.3.py:

$ python3 setup.3.py build
$ python3 setup.3.py install

Note python3 name. Many Linux distributions ship both Python 2 and 3, and use the different name to distinguish versions.

You need to have libaspell headers installed, Debian package is called libaspell-dev, other distributions should have similar package.

In order to install aspell-python for all users, you must be a root. If you are, type following command:

$ python setup.py install

It builds package and installs aspell.so in directory /usr/lib/{python}/site-packages.

If you don't have root login, you can append --user to the install command, to install it for the current user in ~/.local/lib/{python}/site-packages.

To correctly install aspell's dictionaries in Windows some additional work is needed. Eric Woudenberg has prepared detailed step-by-step instruction avaiable in file windows.rst.

Aspell-python module is seen in python under name aspell. So, aspell-python module is imported in following way:

import aspell

The module provides Speller class, two methods, and three types of exceptions --- all described below.

Method returns a dictionary, where keys are names of configuration item, values are 3-tuples:

  • key type (string, integer, boolean, list)
  • default value for the key
  • short description - "internal" means that aspell doesn't provide any description of item and you shouldn't set/change it, unless you know what you do

Aspell's documentation covers in details all of keys and their meaning. Below is a list of most useful and obvious options (it is a filtered output of ConfigKeys).

('data-dir', 'string', '/usr/lib/aspell-0.60', 'location of language data files')
('dict-dir', 'string', '/usr/lib/aspell-0.60', 'location of the main word list')
('encoding', 'string', 'ISO-8859-2', 'encoding to expect data to be in')
('home-dir', 'string', '/home/wojtek', 'location for personal files')
('ignore', 'integer', 1, 'ignore words <= n chars')
('ignore-accents', 'boolean', False, 'ignore accents when checking words -- CURRENTLY IGNORED')
('ignore-case', 'boolean', False, 'ignore case when checking words')
('ignore-repl', 'boolean', False, 'ignore commands to store replacement pairs')
('keyboard', 'string', 'standard', 'keyboard definition to use for typo analysis')
('lang', 'string', 'pl_PL', 'language code')
('master', 'string', 'pl_PL', 'base name of the main dictionary to use')
('personal-path', 'string', '/home/wojtek/.aspell.pl_PL.pws', 'internal')
('repl-path', 'string', '/home/wojtek/.aspell.pl_PL.prepl', 'internal')
('run-together', 'boolean', False, 'consider run-together words legal')
('save-repl', 'boolean', True, 'save replacement pairs on save all')
('warn', 'boolean', True, 'enable warnings')
('backup', 'boolean', True, 'create a backup file by appending ".bak"')
('reverse', 'boolean', False, 'reverse the order of the suggest list')
('suggest', 'boolean', True, 'suggest possible replacements')

Method creates an AspellSpeller object which is an interface to the GNU Aspell.

Speller called with no parameters creates speller using default configuration. If you want to change or set some parameter you can pass pair of strings: key and it's value. One can get available keys using ConfigKeys.

>>> aspell.Speller("key", "value")

If you want to set more than one pair of key&value, pass the list of pairs to the Speller().

>>> aspell.Speller( ("k1","v1"), ("k2","v2"), ("k3","v3") )

Module defines following errors:

Additionally TypeError is raised when you pass wrong parameters to method.

Error is reported by methods Speller and ConfigKeys. The most common error is passing unknown key.

>>> s = aspell.Speller('python', '2.3')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
aspell.AspellConfigError: The key "python" is unknown.
>>>

Error is reported when module can't allocate aspell structures.

Error is reported by libaspell.

>>> # we set master dictionary file, the file doesn't exist
>>> s = Speller('master', '/home/dictionary.rws')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
aspell.AspellSpellerError: The file "/home/dictionary.rws" can not be opened for reading.
>>>

The AspellSpeller object provides interface to the aspell. It has several methods, described below.

In examples the assumption is that following code has been executed earlier:

>>> import aspell
>>> s = aspell.Speller('lang', 'en')
>>> s
<AspellSpeller object at 0x40209050>
>>>

New in version 1.1, changed in 1.13.

Method returns current configuration of speller.

Result has the same meaning as ConfigKeys() procedure.

New in version 1.14

Method alters configuration value. Note that depending on key's type value is expected to be: string, boolean or integer.

Although setting all keys is possible, changes to some of them have no effect. For example changing lang doesn't change current language, it's an aspell limitation (feature).

Method checks spelling of given word. If word is present in the main or personal (see addtoPersonal) or session dictionary (see addtoSession) returns True, otherwise False.

>>> s.check('word') # correct word
True
>>> s.check('wrod') # incorrect
False
>>>

New in version 1.13.

It's possible to use operator in or not in instead of check().

>>> 'word' in s
True
>>> 'wrod' in s
False
>>>

Method returns a list of suggested spellings for given word. Even if word is correct, i.e. method check returned 1, action is performed.

>>> s.suggest('wrod') # we made mistake, what aspell suggests?
['word', 'Rod', 'rod', 'Brod', 'prod', 'trod', 'Wood', 'wood', 'wried']
>>>

Warning! suggest() in aspell 0.50 is very, very slow. I recommend caching it's results if program calls the function several times with the same argument.

Adds a replacement pair, it affects order of words in suggest result.

>>> # we choose 7th word from previous result
>>> s.addReplacement('wrod', 'trod')
>>> # and the selected word appears at the 1st position
>>> s.suggest('word')
['trod', 'word', 'Rod', 'rod', 'Brod', 'prod', 'Wood', 'wood', 'wried']

If config key save-repl is true method saveAllwords saves the replacement pairs to file ~/.aspell.{lang_code}.prepl.

Adds word to the personal dictionary, which is stored in file ~./.aspell.{lang_code}.pws. The added words are available for AspellSpeller object, but they remain unsaved until method saveAllwords is called.

# personal dictionary is empty now
$ cat ~/.aspell.en.pws
personal_ws-1.1 en 0

$ python
>>> import aspell
>>> s = aspell.Speller('lang', 'en')
# word 'aspell' doesn't exist
>>> s.check('aspell')
0

# we add it to the personal dictionary
>>> s.addtoPersonal('aspell')

# and now aspell knows it
>>> s.check('aspell')
1

# we save personal dictionary
>>> s.saveAllwords()

# new word appeared in the file
$ cat ~/.aspell.en.pws
personal_ws-1.1 en 1
aspell

# check it once again
$ python
>>> import aspell
>>> s = aspell.Speller('lang', 'en')

# aspell still knows it's own name
>>> s.check('aspell')
1

>>> s.check('aaa')
0
>>> s.check('bbb')
0
# add incorrect words, they shouldn't be saved
>>> s.addtoPersonal('aaa')
>>> s.addtoPersonal('bbb')
>>> s.check('aaa')
1
>>> s.check('bbb')
1

# we've exit without saving, words 'aaa' and 'bbb' doesn't exists
$ cat ~/.aspell.en.pws
personal_ws-1.1 en 1
aspell
$

Adds word to the session dictionary. The session dictionary is volatile, it is not saved to any file. It is destroyed with AspellSpeller object or when method clearSession is called.

Save all words from personal dictionary.

Clears session dictionary.

>>> import aspell
>>> s = aspell.Speller('lang', 'en')
>>> s.check('linux')
0
>>> s.addtoSession('linux')
>>> s.check('linux')
1
>>> s.clearSession()
>>> s.check('linux')
0

Returns list of words from personal dictionary.

Returns list of words from session dictionary.

>>> s.addtoSession('aaa')
>>> s.addtoSession('bbb')
>>> s.getSessionwordlist()
['aaa', 'bbb']
>>> s.clearSession()
>>> s.getSessionwordlist()
[]
>>>

Returns list of words from the main dictionary.

All version of aspell I've tested have the same error - calling method getMainwordlist produces SIGKILL. It is aspell problem and if you really need a full list of words, use external program word-list-compress.

method aspell 0.50.5 aspell 0.60.2 aspell 0.60.3
ConfigKeys ok ok ok
Speller ok ok ok
check ok ok ok
suggest ok ok ok
addReplacement ok ok ok
addtoPersonal ok ok ok
saveAllwords ok ok ok
addtoSession ok ok ok
clearSession ok AspellSpellerError ok
getPersonalwordlist ok SIGKILL ok
getSessionwordlist ok SIGKILL ok
getMainwordlist SIGKILL SIGKILL SIGKILL

Aspell uses 8-bit encoding. The encoding depend on dictionary setting and is stored in key encoding. One can obtain this key using speller's ConfigKeys.

If your application uses other encoding than aspell, the translation is needed. Here is a sample session (polish dictionary is used).

>>> import aspell
>>> s=aspell.Speller('lang', 'pl')
>>>
>>> s.ConfigKeys()['encoding']
('string', u'iso-8859-1', 'encoding to expect data to be in')
>>> enc =s.ConfigKeys()['encoding'][1]
>>> enc  # dictionary encoding
'iso-8859-1'
>>> word # encoding of word is utf8
# 'gżegżółka' means in some polish dialects 'cuckoo'
'g\xc5\xbceg\xc5\xbc\xc3\xb3\xc5\x82ka'
>>> s.check(word)
0
>>> s.check( unicode(word, 'utf-8').encode(enc) )
1

aspell-python's People

Contributors

peternewman avatar progval avatar wojciechmula avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

aspell-python's Issues

Changing Configkeys to use dictionary in other language

Hi,
I've got a question, I'm trying to use aspell-python with a Dutch dictionary and wordlist. How can I set the Configkeys 'data-dir' and 'dict-dir' to point to my directories?
I've tried to use something like this:
aspell.ConfigKeys()[5] = 'C:/TmpInstall/data/'
aspell.ConfigKeys()[7] = 'C:/TmpInstall/dict/'
But I can't find the right syntax.

Regards,
Rianne

`extra-dicts` arg doesn't work with multiple dicts

ConfigKeys says extra-dicts takes a list:

>>> import aspell
>>> aspell.ConfigKeys()['extra-dicts']
('list', [], 'extra dictionaries to use')

But passing it as a list doesn't work:

>>> aspell.Speller(('extra-dicts', ['./a.dict', './b.dict']))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument 0: tuple of two strings (key, value) expeced

(Also a typo: expeced should be expected)

Passing a single dict does work for a single dict:

>>> aspell.Speller(('extra-dicts', './a.dict'))
<AspellSpeller object at 0x100991d50>

But ignores the first option if passed multiple times:

# Confirm that ./bad.dict doesn't exist
>>> aspell.Speller(('extra-dicts', './bad.dict'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
aspell.AspellSpellerError: The file "./bad.dict" can not be opened for reading.

# But it's not opened if it's replaced by a later arg
>>> aspell.Speller(('extra-dicts', './bad.dict'), ('extra-dicts', './b.dict'))
<AspellSpeller object at 0x1008d1f70>

add-extra-dicts works:

>>> aspell.Speller(('add-extra-dicts', './a.dict'), ('add-extra-dicts', './b.dict'))
<AspellSpeller object at 0x1008d1f70>

# Check to make sure not silently skipping the first dict
>>> aspell.Speller(('add-extra-dicts', './bad.dict'), ('add-extra-dicts', './b.dict'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
aspell.AspellSpellerError: The file "./bad.dict" can not be opened for reading.
>>> aspell.Speller(('add-extra-dicts', './bad.dict'), ('add-extra-dicts', './b.dict'))

But it's confusing since add-extra-dicts doesn't show up in ConfigKeys:

>>> aspell.ConfigKeys()['add-extra-dicts']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'add-extra-dicts'

Config the number of suggestions

How can we control the number of suggestions returned, or sensitivity?

For example, when doing: s.suggest('wuld'), I get:

['wild', 'would', 'Wald', 'weld', 'wold']

But the word 'world' is missing. Is a way to control it?

In addition, the default English dictionary contains a lot of names (starting with capital letters). Is there a better dictionary file that contains only proper words?

Speller.suggest() segfaults under Python 3

System is an Ubuntu 14.04 Linode, with the latest zip file built as per instructions (python3 setup.py build && python3 setup.py install for Python 3). All dependencies are satisfied, I believe (aspell, aspell-en, libaspell-dev, libaspell15).

Python 2:

>>> import aspell
>>> s = aspell.Speller()
>>> s.check('test')
1
>>> s.suggest('test')
['test', 'testy', 'teat', 'tests', 'rest', 'yest', 'Tet', 'EST', 'est', 'Tess', 'text', 'Best', 'TESL', 'West', 'Zest', 'best', 'fest', 'jest', 'lest', 'nest', 'pest', 'tent', 'vest', 'west', 'zest', "Te's", "test's", "Tet's"]

Python 3:

>>> import aspell
>>> s = aspell.Speller()
>>> s.check('test')
True
>>> s.suggest('test')
Segmentation fault

Any suggestions? Note the different result type for Speller.check()...

Problem with installation on Mac OS X

I am having the same issue that sizhky was having a couple months ago.

I am trying to install aspell for Python 3 (on MacOS X 10.11), and have encountered an issue (the same one) using both pip and the manual installer (by cloning the git repo). I have already installed aspell using MacPorts (sudo port install aspell) as well as the english dictionary (sudo port install aspell-dict-en).

The error is obvious (aspell.h cannot be found), however I have no idea how to fix it.

aspell-python_ -bash _87x71

I have the necessary header file as shown below, and the path is in the PATH environment variable. I even created a symbolic link to the gcc location for good measure, but that didn't work.

include

Any help would be greatly appreciated.

Problem building for Python 3

I had a problem building for Python3. I think the README should state

$ python3 setup.3.py build
$ python3 setup.3.py install

instead of

$ python setup.3.py build
$ python setup.3.py install

However pip3 install aspell-python-py3 also does the trick. That may be added to README as well.

PS Vote for https://bugs.launchpad.net/ubuntu/+bug/1474451 to get this library packaged for Ubuntu

Feature Request: init with several '.aspell.{lang}.pws' files

hi,

thanks for the great library!

here is a minor improvement:

  1. assume i want to add 100 new people names (which Aspell is not aware of).
  2. i would add them using 'addtoPersonal' + 'saveAllwords', everything looks good.
  3. now assume i want to also add 100 new city names.
  4. i would again use 'addtoPersonal' + 'saveAllwords', results would concatenate, everything looks good.
  5. imagine i now want to replace the old 100 people names with 200 different people names. i can only do this by running the whole procedure again, which becomes an issue once you have datasets with millions of words.
  6. it would be better if i could pass several filenames for Aspell to init with

python setup.2.py build: aspell.h not found

On Mac OSX 10.13.6 (High Sierra) with Miniconda Python 2.7.15, I download and ran the build command but gcc failed due to the lack of aspell.h.

My Miniconda directory (to which setuptools should be sending everything it builds) has an include sub-directory, but aspell.h is not there; in fact, I can't find it anywhere on my hard drive.

I also tried "pip install aspell-python-py2", which also failed with the same error.

Upload package to PyPI

Could you upload your package to PyPI, so it is easier to install packages that depend on aspell-python (automatic install when running the setup.py, or installing from PyPI, for instance)?

Thanks!

Memory leak

Memory leak is created when running this code:

import aspell  
import gc
spellChecker = aspell.Speller('lang', 'en')
word = "TNKLR"
for j in range(0,10000):
	collected = gc.collect()
	print('gc')
	for i in range(100000):
		result = spellChecker.suggest(word)

Feature request: Allow modifying the configuration

Thanks for you work.
Right now, it's not possible to change the configuration. However, with command line, it's possible to improve the spell checking accuracy by changing the suggestion mode (for example, bad-speller give much better results that the default (fast) version).

The page I'm referring to is http://aspell.net/0.50-doc/man-html/4_Customizing.html#SECTION00544000000000000000

Would it be possible to get such feature in a future version ?

Test failure with Python 3.10

Some tests are failing with Python 3.10.

============================= test session starts ==============================
platform linux -- Python 3.10.1, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: /build/aspell-python-py3-1.15
collected 17 items                                                             

test/unittests.py ..........FFF..s.                                      [100%]

=================================== FAILURES ===================================
________________________ TestPersonalwordlist.test_add _________________________

self = <unittests.TestPersonalwordlist testMethod=test_add>

    def test_add(self):
        "addtoPersonal"
    
        for word in self.polish_words:
                self.assertFalse(self.speller.check(word))
    
        for word in self.polish_words:
>               self.speller.addtoPersonal(word)
E     TypeError: a string is required

test/unittests.py:174: TypeError
________________________ TestPersonalwordlist.test_get _________________________

self = <unittests.TestPersonalwordlist testMethod=test_get>

    def test_get(self):
        "getPersonalwordlist"
    
        pwl = self.speller.getPersonalwordlist()
        self.assertEqual(set(pwl), set())
    
        for word in self.polish_words:
>               self.speller.addtoPersonal(word)
E     TypeError: a string is required

test/unittests.py:186: TypeError
______________________ TestPersonalwordlist.test_saveall _______________________

self = <unittests.TestPersonalwordlist testMethod=test_saveall>

    def test_saveall(self):
        "saveAllwords"
    
        for word in self.polish_words:
>               self.speller.addtoPersonal(word)
E     TypeError: a string is required

test/unittests.py:195: TypeError
=========================== short test summary info ============================
FAILED test/unittests.py::TestPersonalwordlist::test_add - TypeError: a strin...
FAILED test/unittests.py::TestPersonalwordlist::test_get - TypeError: a strin...
FAILED test/unittests.py::TestPersonalwordlist::test_saveall - TypeError: a s...
=================== 3 failed, 13 passed, 1 skipped in 0.48s ====================

License

Can you include a license file in repo? I was going to extract license from a file in source but none of them has license info, besides setup.py saying which BSD clause it is. Void needs a license file for "non-standard" licenses.

Aspell .suggest not reciprocal?

When doing .suggest('patients'), I don't see patience in the list.
But when doing .suggest('patience'), I do see patients in the list.

Why isn't it reciprocal?``

pip3 install fails: aspell.h not found

I tried to install using pip3 on MacOS Sierra, using homebrew and python 3.6.2, and I get the following error (aspell.h not found):

>$ pip3 install aspell-python-py3
Collecting aspell-python-py3
  Downloading aspell-python-py3-1.15.tar.bz2
Building wheels for collected packages: aspell-python-py3
  Running setup.py bdist_wheel for aspell-python-py3 ... error
  Complete output from command /usr/local/opt/python3/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/private/var/folders/w_/8np4m5mj3x3d9kvd9zq2s2580000gn/T/pip-build-2b4ebsy7/aspell-python-py3/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /var/folders/w_/8np4m5mj3x3d9kvd9zq2s2580000gn/T/tmp72mb0nhcpip-wheel- --python-tag cp36:
  running bdist_wheel
  running build
  running build_ext
  building 'aspell' extension
  creating build
  creating build/temp.macosx-10.12-x86_64-3.6
  clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/opt/local/include -I/usr/local/include -I/usr/local/opt/openssl/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/include/python3.6m -c aspell.c -o build/temp.macosx-10.12-x86_64-3.6/aspell.o
  aspell.c:53:10: fatal error: 'aspell.h' file not found
  #include <aspell.h>
           ^
  1 error generated.
  error: command 'clang' failed with exit status 1
  
  ----------------------------------------
  Failed building wheel for aspell-python-py3
  Running setup.py clean for aspell-python-py3
Failed to build aspell-python-py3
Installing collected packages: aspell-python-py3
  Running setup.py install for aspell-python-py3 ... error
    Complete output from command /usr/local/opt/python3/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/private/var/folders/w_/8np4m5mj3x3d9kvd9zq2s2580000gn/T/pip-build-2b4ebsy7/aspell-python-py3/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /var/folders/w_/8np4m5mj3x3d9kvd9zq2s2580000gn/T/pip-0vdjc8ff-record/install-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_ext
    building 'aspell' extension
    creating build
    creating build/temp.macosx-10.12-x86_64-3.6
    clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/opt/local/include -I/usr/local/include -I/usr/local/opt/openssl/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/include/python3.6m -c aspell.c -o build/temp.macosx-10.12-x86_64-3.6/aspell.o
    aspell.c:53:10: fatal error: 'aspell.h' file not found
    #include <aspell.h>
             ^
    1 error generated.
    error: command 'clang' failed with exit status 1
    
    ----------------------------------------
Command "/usr/local/opt/python3/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/private/var/folders/w_/8np4m5mj3x3d9kvd9zq2s2580000gn/T/pip-build-2b4ebsy7/aspell-python-py3/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /var/folders/w_/8np4m5mj3x3d9kvd9zq2s2580000gn/T/pip-0vdjc8ff-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/w_/8np4m5mj3x3d9kvd9zq2s2580000gn/T/pip-build-2b4ebsy7/aspell-python-py3/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.