Coder Social home page Coder Social logo

christian-fei / simple-jekyll-search Goto Github PK

View Code? Open in Web Editor NEW
1.3K 24.0 204.0 2.78 MB

A JavaScript library to add search functionality to any Jekyll blog.

Home Page: https://christian-fei.github.io/Simple-Jekyll-Search/

License: MIT License

HTML 12.72% JavaScript 66.81% Ruby 1.39% SCSS 19.07%
jekyll-search jekyll-blog javascript search jekyll plugin

simple-jekyll-search's Introduction

Build Status dependencies Status devDependencies Status

A JavaScript library to add search functionality to any Jekyll blog.

Use case

You have a blog, built with Jekyll, and want a lightweight search functionality on your blog, purely client-side?

No server configurations or databases to maintain.

Just 5 minutes to have a fully working searchable blog.


Installation

npm

npm install simple-jekyll-search

Getting started

Create search.json

Place the following code in a file called search.json in the root of your Jekyll blog. (You can also get a copy from here)

This file will be used as a small data source to perform the searches on the client side:

---
layout: none
---
[
  {% for post in site.posts %}
    {
      "title"    : "{{ post.title | escape }}",
      "category" : "{{ post.category }}",
      "tags"     : "{{ post.tags | join: ', ' }}",
      "url"      : "{{ site.baseurl }}{{ post.url }}",
      "date"     : "{{ post.date }}"
    } {% unless forloop.last %},{% endunless %}
  {% endfor %}
]

Preparing the plugin

Add DOM elements

SimpleJekyllSearch needs two DOM elements to work:

  • a search input field
  • a result container to display the results

Give me the code

Here is the code you can use with the default configuration:

You need to place the following code within the layout where you want the search to appear. (See the configuration section below to customize it)

For example in _layouts/default.html:

<!-- HTML elements for search -->
<input type="text" id="search-input" placeholder="Search blog posts..">
<ul id="results-container"></ul>

<!-- or without installing anything -->
<script src="https://unpkg.com/simple-jekyll-search@latest/dest/simple-jekyll-search.min.js"></script>

Usage

Customize SimpleJekyllSearch by passing in your configuration options:

var sjs = SimpleJekyllSearch({
  searchInput: document.getElementById('search-input'),
  resultsContainer: document.getElementById('results-container'),
  json: '/search.json'
})

returns { search }

A new instance of SimpleJekyllSearch returns an object, with the only property search.

search is a function used to simulate a user input and display the matching results. 

E.g.:

var sjs = SimpleJekyllSearch({ ...options })
sjs.search('Hello')

💡 it can be used to filter posts by tags or categories!

Options

Here is a list of the available options, usage questions, troubleshooting & guides.

searchInput (Element) [required]

The input element on which the plugin should listen for keyboard event and trigger the searching and rendering for articles.

resultsContainer (Element) [required]

The container element in which the search results should be rendered in. Typically a <ul>.

json (String|JSON) [required]

You can either pass in an URL to the search.json file, or the results in form of JSON directly, to save one round trip to get the data.

searchResultTemplate (String) [optional]

The template of a single rendered search result.

The templating syntax is very simple: You just enclose the properties you want to replace with curly braces.

E.g.

The template

var sjs = SimpleJekyllSearch({
  searchInput: document.getElementById('search-input'),
  resultsContainer: document.getElementById('results-container'),
  json: '/search.json',
  searchResultTemplate: '<li><a href="{{ site.url }}{url}">{title}</a></li>'
})

will render to the following

<li><a href="/jekyll/update/2014/11/01/welcome-to-jekyll.html">Welcome to Jekyll!</a></li>

If the search.json contains this data

[
    {
      "title"    : "Welcome to Jekyll!",
      "category" : "",
      "tags"     : "",
      "url"      : "/jekyll/update/2014/11/01/welcome-to-jekyll.html",
      "date"     : "2014-11-01 21:07:22 +0100"
    }
]

templateMiddleware (Function) [optional]

A function that will be called whenever a match in the template is found.

It gets passed the current property name, property value, and the template.

If the function returns a non-undefined value, it gets replaced in the template.

This can be potentially useful for manipulating URLs etc.

Example:

SimpleJekyllSearch({
  ...
  templateMiddleware: function(prop, value, template) {
    if (prop === 'bar') {
      return value.replace(/^\//, '')
    }
  }
  ...
})

See the tests for an in-depth code example

sortMiddleware (Function) [optional]

A function that will be used to sort the filtered results.

It can be used for example to group the sections together.

Example:

SimpleJekyllSearch({
  ...
  sortMiddleware: function(a, b) {
    var astr = String(a.section) + "-" + String(a.caption);
    var bstr = String(b.section) + "-" + String(b.caption);
    return astr.localeCompare(bstr)
  }
  ...
})

noResultsText (String) [optional]

The HTML that will be shown if the query didn't match anything.

limit (Number) [optional]

You can limit the number of posts rendered on the page.

fuzzy (Boolean) [optional]

Enable fuzzy search to allow less restrictive matching.

exclude (Array) [optional]

Pass in a list of terms you want to exclude (terms will be matched against a regex, so URLs, words are allowed).

success (Function) [optional]

A function called once the data has been loaded.

debounceTime (Number) [optional]

Limit how many times the search function can be executed over the given time window. This is especially useful to improve the user experience when searching over a large dataset (either with rare terms or because the number of posts to display is large). If no debounceTime (milliseconds) is provided a search will be triggered on each keystroke.


If search isn't working due to invalid JSON

  • There is a filter plugin in the _plugins folder which should remove most characters that cause invalid JSON. To use it, add the simple_search_filter.rb file to your _plugins folder, and use remove_chars as a filter.

For example: in search.json, replace

"content": "{{ page.content | strip_html | strip_newlines }}"

with

"content": "{{ page.content | strip_html | strip_newlines | remove_chars | escape }}"

If this doesn't work when using Github pages you can try jsonify to make sure the content is json compatible:

"content": {{ page.content | jsonify }}

Note: you don't need to use quotes " in this since jsonify automatically inserts them.

Enabling full-text search

Replace search.json with the following code:

---
layout: none
---
[
  {% for post in site.posts %}
    {
      "title"    : "{{ post.title | escape }}",
      "category" : "{{ post.category }}",
      "tags"     : "{{ post.tags | join: ', ' }}",
      "url"      : "{{ site.baseurl }}{{ post.url }}",
      "date"     : "{{ post.date }}",
      "content"  : "{{ post.content | strip_html | strip_newlines }}"
    } {% unless forloop.last %},{% endunless %}
  {% endfor %}
  ,
  {% for page in site.pages %}
   {
     {% if page.title != nil %}
        "title"    : "{{ page.title | escape }}",
        "category" : "{{ page.category }}",
        "tags"     : "{{ page.tags | join: ', ' }}",
        "url"      : "{{ site.baseurl }}{{ page.url }}",
        "date"     : "{{ page.date }}",
        "content"  : "{{ page.content | strip_html | strip_newlines }}"
     {% endif %}
   } {% unless forloop.last %},{% endunless %}
  {% endfor %}
]

Development

  • npm install
  • npm test

Acceptance tests

cd example; jekyll serve

# in another tab

npm run cypress -- run

Contributors

Thanks to all contributors over the years! You are the best :)

@daviddarnes @XhmikosR @PeterDaveHello @mikeybeck @egladman @midzer @eduardoboucas @kremalicious @tibotiber and many others!

Stargazers over time

Stargazers over time

simple-jekyll-search's People

Contributors

bryant1410 avatar carywill avatar christian-fei avatar danblakemore avatar daviddarnes avatar dependabot[bot] avatar egladman avatar eiriksm avatar fontsie avatar glassheart83 avatar harrymt avatar i-give-up avatar jackgruber avatar jamesujeon avatar jonaskohl avatar kremalicious avatar marcwrobel avatar matir avatar midzer avatar mikeybeck avatar nikduvall avatar onnimonni avatar peterdavehello avatar piharpi avatar soywiz avatar sylhare avatar tibotiber avatar x5hwuk7nc6jsudcc avatar xhmikosr avatar yo1995 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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

simple-jekyll-search's Issues

Exclude certain json values?

I've implemented the plugin and it's working perfectly, however I've noticed it's searching the url content in the json file. Some of the pages in my Jekyll site are nested, which means they come up in the results for top level pages.

Could an option be made to exclude or omit them?

exclude: url, …

Search in all collections

Hi there more a comment that an issue, i do it because i cost me a lot to find the answer...

if you want to use this search to look uppon all collection items you only need to change the posts for documents it always better with an example...

this is what you have...



[
{% for post in site.posts %}
{
"title" : "{{ post.title | escape }}",
"category" : "{{ post.category }}",
"tags" : "{{ post.tags | array_to_sentence_string }}",
"url" : "{{ site.baseurl }}{{ post.url }}",
"date" : "{{ post.date }}"
} {% unless forloop.last %},{% endunless %}
{% endfor %}
]

for search in all collections use this..



[
{% for post in site.documents %}
{
"title" : "{{ post.title | escape }}",
"category" : "{{ post.category }}",
"tags" : "{{ post.tags | array_to_sentence_string }}",
"url" : "{{ site.baseurl }}{{ post.url }}",
"date" : "{{ post.date }}"
} {% unless forloop.last %},{% endunless %}
{% endfor %}
]

i hope it help somebody

Build broken

Hi.
Current /dest/ build is broken due required Templater.js, Repository.js, JSONLoader.js and OptionsValidator.js are not included.
This explains the new ultra tiny build size, too :)

Happy easter,
midzer

Search Results Not Closing When Empty

Hey,

I just noticed in the latest version, installed from bower, that when the form field has been typed in, and then the characters deleted that when the last character is deleted it does not remove the results and it does not auto close the results dropdown.

The same implementation code and css works when I grabbed the js from your demo site.

EDIT: Looks like this bug was introduced in the v1.1.1 build as in v1.1.0 this functionality works as expected.
https://github.com/christian-fei/Simple-Jekyll-Search/releases/tag/v1.1.1

D

Adding images

How does one add an image next to the text returns?

for example:

I search "Apple"

And I get the result apple and next to it an image.

Allow searching of pages & posts

I've been using this JS plugin with a documentation site, which meant I needed to search through pages rather than posts. This is the code I used:


---
title: nil

---
{% assign items = site.pages %}
[
    {% for item in items %}{% if item.url != '/search.json' %}{% if item.url != '/css/screen.css' %}
        {
            "title"    : "{{ item.title }}",
            "content"  : {{ item.content | jsonify }},
            "url"      : {{ item.url | jsonify }}
        }{% unless forloop.last %},{% endunless %}{% endif %}{% endif %}
    {% endfor %}
]

I've swapped the posts for pages, but using an assigned variable so I'm not repeating myself. I've also used the jsonify filter to clean up the content and url incase it has anything that will clash with json syntax.

The only problem is that I had to exclude the search.json and the outputted CSS using two conditional statements, I'm not sure why it thinks they are pages. Thoughts?

For multi-blog websites allow to restrict search based on front matter category

Awesome library. Very helpful.

I am working on a two-blog jekyll website. To show posts for each blog I just use an if statement within a for loop:

{% for post in site.posts %}
                    {% if post.blog contains '1' %}
                    ...
                   {% endif %}
{% endfor %}

where blog is a variable in the yaml front matter of a post. It would be helpful to restrict search for the posts with a blog variable that equals to 1 for blog one and to 2 for blog 2. I am thinking the easiest would be filtering the results that get displayed under the search box, ex. g. for blog one only show the results that haveblog variable equal to one.

I am not sure how to do that. Possibly, specify filtering in the script as an option.

Great work.

Apply the MIT License properly

@christian-fei

Problem

Currently, only a part of the MIT License is included, which is attached to the end of README.md.

Because the license is not in a LICENSE file and the copyright notice is missing, it is very hard, if not impossible, to use Simple-Jekyll-Search without violating §2 of the license:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

Recommended fix

  • Move the license to a LICENSE file.
  • Add a copyright notice at the top of the license, including:
    • the name(s) of the author(s) and
    • the copyright year(s)
  • Add a copyright notice in jekyll-search.js and/or other files you want to license.

Prevent form submission with enter key

I've had to prevent my search form from submitting when people press enter, it was adding "?" to the url and therefore refreshing the page. I used the following to prevent it:

document.getElementById('search-field').addEventListener('keypress', function(event) {
    if (event.keyCode == 13) {
        event.preventDefault();
    }
});

I'm guessing this wouldn't be an issue if I didn't use a <form> element? Still might be good to prevent any submission?

How work the plugin

Hi guys,

I would like test this plugin on my jekyll project, but i don't know how work the plugin. Do you have example ?

Should I put up a form? It is a little fuzzy for me ^^

Thank you !

"escape" is breaking build?

"simple-jekyll-search": "^1.2.0"

Search.json
screenshot from 2017-06-28 11-11-47

user@pc:~/Documents/proyecto$ gulp
[11:20:08] Using gulpfile ~/Documents/proyecto/gulpfile.js
[11:20:08] Starting 'sass'...
[11:20:08] Starting 'js'...
[11:20:08] Finished 'js' after 2.53 ms
[11:20:08] Starting 'jekyll-build'...
Configuration file: _config.yml
            Source: /home/user/Documents/proyecto
       Destination: /home/user/Documents/proyecto/_site
 Incremental build: disabled. Enable with --incremental
      Generating... 
[11:20:09] Finished 'sass' after 681 ms
  Liquid Exception: no implicit conversion of Integer into String in search.json
jekyll 3.5.0 | Error:  no implicit conversion of Integer into String
[11:20:10] 'jekyll-build' errored after 1.26 s
[11:20:10] Error: 1
    at formatError (/home/user/.nvm/versions/node/v8.1.2/lib/node_modules/gulp-cli/lib/versioned/^3.7.0/formatError.js:20:10)
    at Gulp.<anonymous> (/home/user/.nvm/versions/node/v8.1.2/lib/node_modules/gulp-cli/lib/versioned/^3.7.0/log/events.js:41:15)
    at emitOne (events.js:115:13)
    at Gulp.emit (events.js:210:7)
    at Gulp.Orchestrator._emitTaskDone (/home/user/Documents/proyecto/node_modules/orchestrator/index.js:264:8)
    at /home/user/Documents/proyecto/node_modules/orchestrator/index.js:275:23
    at finish (/home/user/Documents/proyecto/node_modules/orchestrator/lib/runTask.js:21:8)
    at ChildProcess.cb (/home/user/Documents/proyecto/node_modules/orchestrator/lib/runTask.js:29:3)
    at emitTwo (events.js:125:13)
    at ChildProcess.emit (events.js:213:7)

If I remove | escape from "title" : "{{ post.title | escape }}", (search.json) works fine.

Rendering ascii in search results

A few of my post titles have ascii code (e.g. colons &#58; and slashes &#47;), and while they render just fine in the post pages they show up as plain text in the search results. Is there any way I can modify searchResultTemplate to render these codes as the proper characters? Right now I'm using

searchResultTemplate: '<li><a href="{url}" title="{desc}">{title}</a></li>'

I presume I just need to add something to the {title} variable, e.g. { title | renderascii } or something like that.

"full-text search" donot work!

When I use the search.json which not enable the full-text search, do work very well to search the post.
But When I replace the search.json to enable the full-text search, it donot work anymore and it cannot search nothing and even no feedback with "No find results" .
I donot know the reason.

Keyboard navigation

So, when the results container shows up, one cannot navigate to the search results with keyboard up/down.

Documentation Updates

Hi, i was going to open an issue saying search was poor but i figured out (partly) why. The guide says to use.

    {% for post in site.posts %}
        {
          "title"    : "{{ post.title | escape }",
          "category" : "{{ post.category }}",
          "url"     : "{{ post.url }}",
          "date"     : "{{ post.date }}"
        } {% if forloop.last %}{% else %},{% endif %}
    {% endfor %}

Looking at the json file for your website i found you used the "desc" tag. My searches went from rubbish to good once this was included. Notably a title of "code" would only match "c" in search where code in a description would match the full and partial word.

Secondly theres no mention of how to incorporate tags from #1

Cheers for this script, it works very well when set up correctly.

wish - keyboard up/down navigation against the search results

Hi?

I am not sure this is related to this project though--bc it's JS thing, I hope there is such function. I tried by myself, but was not easy to me. I think this helps others too~ I you don't have plan on this thing, please close this issue immediately.

Thanks ^^/

p.s. Shame on me, uuuugly code... but my approach was,

$('#search').on('keydown', function(e) {
  if (e.keyCode !== 38 && e.keyCode !== 40) {
    return;
  }

  var target = $('#search-results').find('li');

  if (! window.current) {
    if (target.length < 1) {
      return;
    }

    window.current = target.first();
  } else {
    window.current = (e.keyCode === 40) ? target.next().first() : target.prev().first();
  }

  window.current.get(0).focus();
});

Add the minified in the bower

Could you minify the "jekyll-search.js" file and make it available at "bower.json"?
Like this:

"ignore": [
"*",
"!dest/jekyll-search.min.js",
"!dest/jekyll-search.js",
"!README.md"
],

Thank you :)

[bug] disappearing the results

  • Version: 1.1.4 (latest)

I recently updated this script. But unlike before, this version is disappearing the results. It is occurred when I pressed arrow key to choose the page link or edit searching words. Please check this issue.

Entity returned in results

Steps to reproduce:

  1. Go to http://v4-alpha.getbootstrap.com/getting-started/introduction/, search for th.
  2. Check the search results
    Result:
Bootstrap &middot; The world's most popular mobile-first and responsive front-end framework.

Expected:

Bootstrap · The world's most popular mobile-first and responsive front-end framework.

Now, this probably is Jekyll-related but the code snippet we use to generate seaarch.json is causing this

[
    {% for page in site.pages %}
        {
            "title" : "{{ page.title | escape }}",
            "url"   : "{{ site.baseurl }}{{ page.url }}",
            "date"  : "{{ page.date }}"
        } {% unless forloop.last %},{% endunless %}
    {% endfor %}
]

If I remove escape it seems to work.

Another issue I see is with pages having empty titles.

[
    {% for page in site.pages %}
        {% if page.title != nil %}
            {
                "title" : "{{ page.title }}",
                "url"   : "{{ site.baseurl }}{{ page.url }}",
                "date"  : "{{ page.date }}"
            } {% unless forloop.last %},{% endunless %}
        {% endif %}
    {% endfor %}
]

This works, i.e. only outputs pages with title, but then the plugin complains it can't find search.json.

So, how do you think I should proceed here @christian-fei ?

include post.content in search

I've been using this awesome search on my website. I'd like the search to also be able to search through a post's content. Here's my search.json:


---
layout: null

---
[
   {% for post in site.posts %}
     {
       "title"    : "{{ post.title | escape }}",
       "category" : "{{ post.category }}",
       "tags"     : "{{ post.tags | array_to_sentence_string }}",
       "url"      : "{{ site.baseurl }}{{ post.url }}",
       "date"     : "{{ post.date }}",
       "content"  : "{{ post.content }}"
        } {% unless forloop.last %},{% endunless %}
     {% endfor %}
 ]

Including content disables the .js. Any clue why? Any recommended changes the .js to make it also search through the content?

Thanks!

Reuse of JekyllSearch (without jQuery)

First of all, thx for that work.
Maybe some information are missing.
I am not an expert in JavaScript.
Here is the problem and the workaround :

PROBLEM
When I integrated jekyll-search.js in my project, I got errors :
"couldn't find the searchInput or searchResults element"

WORKAROUND

  • copy lines 12 and 16 in the load function (netween lines 121 and 122).

IMPROVEMENT TO DO

  • is the workaround correct ?
  • Is there something nicer to do ? I supposed that this problem came from the fact thats the two elements were not evaluated when JekyllSearch is evaluated.

Thx for time you can spend on it.

NOTE
line 12 : searchInput = document.querySelector(".search")
line 16 : searchResults = document.querySelector(".results")

Own results page

How is it possible to have a result page if hitting ENTER? Thanks! (BTW really nice Script)

Extended usage

Hi, there.

So here's what I'm trying to do; instead of only searching through files, I'm trying to search through a collection's IDs so that each result can link to that anchor. Here's a sort of pseudo code of what I'm trying to achieve:

---
layout: null
---

[
{% assign sorted_pages = site.faq | sort: 'title' %}
{%- for page in sorted_pages -%}

{% assign headers = page.content | split: 'h2' %} // Split each header

{%- for header in headers -%}
{
    "title" : {{ header | strip_html | jsonify }},
    "url" : "{{ site.baseurl }}{{ page.url }}",
    "content" : {{ header | strip_html | normalize_whitespace | jsonify }}
    "id" : {{ header | split: 'id=' | first | jsonify }}
}{% unless forloop.last %},{% endunless %}
{%- endfor -%}{% unless forloop.last %},{% endunless %}
{%- endfor -%}
]

My FAQ entries have a consistent Markdown syntax; they all follow this scheme:

## header

Content

## next header

More content

...

This doesn't work of course, so I'm wondering if @christian-fei you have any ideas how to achieve this.

This recipe should make search a lot more flexible if we manage to get it to work :)

Load json file when the input has focus

Currently it seems that the json file is retrieved on page load via an XHR.

I think it would be better to make the XHR when the input is focused, i.e the user intends to do a search.

Expose search function

It would be nice to expose the search function in order to be able to programmatically trigger the search.

remove the "/" from the page URL

I'm making my jekyll site relative, and designed to be deployed in a subdirectory off of a domain. This poses some problems with Jekyll-Search's ability to format correct links in the results.

When I click on a search result, the URL prepends a forward slash, like this:

/pageresult.html

As a result, the page doesn't load because I have my jekyll site in a directory such as domain/folder/subfolder/

When I click /pageresult.html, it goes to this:

domain/pageresult.html

instead of:

domain/folder/subfolder/pageresult.html

How can I remove the "/" before the page result? If the result would simply go to pageresult.html, it would load the page.

In the script, the searchResultTemplate shows this:

   searchResultTemplate: '<li><a href="{url}" title="{{page.title}}">{title}</a></li>',

I tried to determine how {url} gets populated from jekyll-search.js, but I couldn't see how to apply any kind of filter to remove the "/". Can you help? Thanks,

Tom

Current build shows wrong search results.

I was using the version of this search that shipped with the theme I am using for my blog. https://github.com/jacobtomlinson/carte-noire/tree/gh-pages/js
Everything was fine.

Now I saw that there is an uncompressed build and I wanted to use that one to make minor changes. When plugging in (changing dataSource to json, removing .init) the search shows nearly all blog posts as search results even though the search word is not contained. Same behaviour for the current minified version I pulled with bower.

Any hints what changes might cause this to break compared the old version?

Publish to npm?

I might have missed something but is this package published to npm? Couldn’t find it in the registry but as it has a package.json and is not private I expected to find it there.

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.