Neo4j Recommendation Engine [closed] - neo4j

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 9 years ago.
Improve this question
I am new user on Neo4J.. Just one week of reading.
I am looking into using NEO4J for creating recommendations.
We have product catalog and on product details page we would like to show similar products
based on features of different products, cumulative rating, price range.
These products as such don't have relationship with each other except that they share common features.
For example
Product : iphone
Feature: camera, 4g etc
product: Samsung Note
Feature: camera, 4g etc
Any thoughts if Neo4J is correct choice for this type of data? We want list of similar products based on feature set, price rang, rating for each prodct
And how wold data model will look?

You might take a look at http://www.reco4j.org/, a recommondation engine framework working on top of Neo4j.

I'd suggest looking at a site like Amazon.com (or similar) and see how they organize their SKU. If you open up any item on Amazon you will "facets" (or ways to categorize items) like:
Department
Sub-Category
Brand
User Rating
Price Range
Features (as keywords)
You then have to determine whether each of these facets is better modeled as a hierarchy or as a property. Department and Sub-Category look like better candidates for a hierarchy, whereas Brand and Features look like better candidates for properties.
Department and Sub-Category would look like trees, and the leaves of the tree would be all your SKUs.
Then your "similarity" function could be as easy as if a "product falls within the same Department/Sub-Category and it matches at least 50% of the features".
Hope this helps, this is just my initial thoughts.

There are several options:
you can do recommendations by finding similar users (via their actions/purchase history/ratings) and recommend things that those similar users have bought, see: http://docs.neo4j.org/chunked/milestone/cypher-cookbook-similar-favorites.html
you can simple list other products that are in the same category and have similar attributes (it is good if you can pull out attributes as nodes instead of properties so it is easier to match them)
you can list products that would be useful accessories for already bought products (it doesn't make sense to suggest a camera to someone who just bought a camera, rather accessories for what he bought)
if you have no initial purchase data you can just list products with high rankings in similar demographics (gender, age, etc)

Related

How to generate question based on information given in question or by combining multiple questions?

I have a dataset of question and I want to generate the questions from the given text. For example, if I have a task like "John paid 1500$ for television set. Television set has 25% discount. Calculate the original price of television set." and I want to generate something like "Calculate the discount given for the television set"
Or alternative version is to permutate multiple question. I have multiple questions with the same information given, but different questions asked (like all three questions share information about in which ratio the object was shared, but different questions asked)
I was looking for the text paraphrase task but it don't work for me, because I want to generate new question, rather than paraphrasing existing.
Also, I was thinking about storing the questions in the format of knowledge graph and somehow extract the text from it for text generation
It will be great to know is there were similar problem in the domain and how the problem like this called.

Drill Down in Treemap in Tableau

I want to use Drill Down in Treemap. I have different categories and one Measure: Sales. For instance, I have Product Type, Country, and Year.
Firstly, I want to build a treemap based on product, Next when I click on any specific Product, I want to drill into a new sub-Map about how this product is traded across the Countries. And after when I click each County, want to see how the sum of sales is distributed through the Years
I have seen a lot of videos on YouTube, but all of them are made for subcategories, not for different variables. Therefore, could anybody give the instructions path on how to deal with this issue? Or just link any relevant video

Rails: How to query records in different languages

I have a Rails inventory app that is available to global users, allowing them to enter their own inventory information and query those of others.
a British person in London adds 10 units of "bicycle" to the inventory table
a Japanese person adds 2 units of 自転車 (bicycle in Japanese)
a Vietnamese adds 5 units of xe dap (bicycle in Vietnamese)
The British person can query 'bicycle' and it will output all bicycles in the system (17 units) and can show the details of each in their original language, without the users classifying them beforehand. Likewise, the Japanese person can query '自転車', which will show all bicycles.
How can this be done?
The globalize gem requires users to manually translate each record so it's not the correct way. I've heard about machine learning and deep learning but I don't know if it's the right solution for this.
So if stackoverflow is not the right place to ask this? Where should I ask? Quora does not allow long questions.
Machine learning does not seem like a proper solution in this context since you don't have enough experience with it and it's a complex matter to just start with it and learn enough to apply to a real life problem.
Here are a few solutions you could implement today, as long as you understand the requirements and the up/downs for each, you will have to figure those out by yourself.
Since I don't have enough information about your system I'll try and generalize it to something that's likely.
Solutions:
1.Define a limited number of items for your system, like Bike and add
them to a config file or in a items database, each item having it's
unique id and when a user will have to add something they will have
to select from your list. Have a Other item as a catch-all, and
maybe provide a note so the users can add anything to recognize the
item.
2.Similar to the above solution but you give the users a way to add new items into the system, so you have 10 standard items and every user can add items to the site (those being moderated) and other users will have access to them.
3.Have a solid search system in place like Elasticsearch (or anything else), and when the user create items you index that item in the language that is entered, and then use Google translation API (or another translation service) to translate them in all the languages you need and index those for search as well.
I think solution 1 is the best if you are able to implement it followed by solution 2.

Find County name for a Lat/Long [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 23 days ago.
The community reviewed whether to reopen this question 23 days ago and left it closed:
Original close reason(s) were not resolved
Improve this question
I'm trying to find a webservice that will allow me to get a County name (not Country) for a specific Lat/Long. I would be performing the lookup within a server application (likely a Java application). It doesn't have a be a webservice if there is some library out there I suppose, but I would like up-to-date information. I have looked around quite a bit for an API that supports this, but so far I haven't been able to find one that works. I have tried the Yahoo APIs like so:
http://where.yahooapis.com/geocode?q=39.76144296429947,%20-104.8011589050293
But it doesn't populate the address information. I've tried with some of the "flags" options there too to no avail.
I've also looked around at Googles APIs as well, but I've read multiple places that they don't populate the County.
So does anyone know of any APIs that will take a Lat/Long and return the County associated with that location? And if you have any examples, that would be great.
I'd also like to know which APIs allow for use in a commercial application. A lot of the data I've found says that you can't use the data to make money. I might be reading those wrong, but I'm looking to build a service that I'd likely charge for that would use this data. So I'd need options. Maybe free services while I'm exploring options, and pay services down the road.
Just for completeness, I found another API to get this data that is quite simple, so I thought I'd share.
https://geo.fcc.gov/api/census/
The FCC provides an Block API for exactly this problem and it uses census data to perform the look up.
Their usage limit policy is (From developer#fcc.gov)
We do not have any usage limits for the block conversion API, but we do ask that you try to spread out your requests over time if you can.
Google does populate the county for your example,
http://maps.googleapis.com/maps/api/geocode/json?latlng=39.76144296429947,-104.8011589050293&sensor=false
In the response, look under the key address_components which contains this object representing "Adams" county,
{
long_name: "Adams"
short_name: "Adams"
-types: [
"administrative_area_level_2"
"political"
]
}
Here's from the Geocoding API's docs,
administrative_area_level_2 indicates a second-order civil entity below the country level. Within the United States, these administrative levels are counties. Not all nations exhibit these administrative levels.
Another option:
Download the cities database from http://download.geonames.org/export/dump/
Add each city as a lat/long -> Country mapping to a spatial index such as an R-Tree (some DBs also have the functionality)
Use nearest-neighbour search to find the country corresponding to the closest human settlement for any given point
Advantages:
Does not depend on aa external server to be available
Much faster (easily does thousands of lookups per second)
Disadvantages:
May give wrong answers close to borders, especially in sparsely populated areas
You may want to have look at Tiger data and see if it has polygons containing the county name in an attribute. If it does the Java Geotools API lets you work with this data. You will be performing point in polygon queries for the county polygons followed by a feature attribute look-up.
Maybe this is a great solution.It is in a json format.I always use this in my projects.
http://maps.google.com/maps/geo?ll=10.345561,123.896932
And simply extract the information using php.
$x = file_get_contents("http://maps.google.com/maps/geo?ll=10.345561,123.896932");
$j_decodex = json_decode($x);
print_r($j_decodex);

Music analysis software [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 4 years ago.
Improve this question
Greetings
I may have imagined this but does anyone know if Last.fm previously used some form of open source project to perform analysis on music to determine similar music.
As its now moved to a pay version I'd like to make something which can add known music to my playlist. (I hate scanning my computer for similar music manually)
Failing that - does anyone know of any system that I could use to replace this ? Ideally I'd like some form of API / Source code that I can use to automate the whole process into batch jobs.
Thanks,
[edit]
Ideally I was looking for something more along the lines of content matching. I'm the type of person who just throws all my music into one unorganized location. Then being lazy I would ideally expect a playlist to be generated giving me a similar music type of playlist.
Last.fm uses http://www.audioscrobbler.net/ - it also provides access to its database via an API.
[/edit]
Music similarity is not an easy problem.
There are two general approaches to solving this problem.
Approach 1.
Throw data at the problem. This is the approach LastFM and Pandora take. It's basically one huge database which is maintained by either a community or group of experts. Note that to use this approach you will need clean metadata or some kind of audio fingerprinting solution like musicbrainz. Once you have the feature database you can use algorithms such as Pearson correlation coefficient to find similar items.
Approach 2.
Throw algorithms at the problem. In particular, computer audition algorithms. This means you calculate vectors of various features a song contains and using neural nets and a variety of other techniques you find other songs with similar vectors. This approach has been used successfully for automatic genre classification and query by example.
If you are looking for open source software for music analysis, marsyas can do pretty much everything the commercial stuff can do. Its the brain child of George Tzanetakis and on his web site you can find many papers about the state of affairs with computer audition.
There's a web API at The Echo Nest that includes a get_similar web service that allows you to retrieve similar artists to a set of seed artists. You can use this to help build playlists. The Echo Nest also has a set of web APIs that will perform a detailed analysis of a track (similar to the aforementioned Marsyas) that one could use as the basis for an acoustic-based song similarity method. (Caveat, I work at the Echo Nest). Of course, if you use iTunes, there's some canned solutions. iTunes now has a music recommender / playlist generator that will build playlists of songs from simliar artists. Similarly, the company Mufin has an iTunes add on which will perform acoustic analysis of your tracks and use this analysis to build playlists.
If you are interested in building your own music similarity system, I suggest that you take a look at the proceedings for ISMIR (the International Society of Music Information Retrieval). There's quite a bit of research around music similarity and playlisting that you'll find helpful. You can find the proceedings at ismir.net
Wouldn't it be simpler/more efficient to query(build?) some internet database based on genre/style/etc? I used last.fm and similar sites but never felt they did anything more then this (at least the results weren't indicating that) ;)
I am not very sure what exactly you want, but how about MusicBrainz?
To be clear, AudioScrobbler is the tech built by Last.fm to run their service. They collect stats on the tracks which people listen to (also 'Like's of tracks and artists).
So Last.fm does social similarity... users who listened to X also listened to Y - you like X so maybe you will also like Y.
Given a large enough user base submitting stats, social similarity is likely to provide better results than computer analysis approaches. For example, try querying the Last.fm API for similar artists to someone you know - probably comes up with some good matches and a few obscure or oddball ones, which nonetheless reflect real people's listening habits. The more obscure the artist you search for the more likely you'll get weird matches.
Even if you could get the automatic genre classification method described by George Tzanetakis to work well you are missing out on the subjective judgements of quality supplied by real people. eg two tracks both look like 'Jazz' but there are many different kinds of Jazz... and I might be interested in non-Jazz albums that a favourite jazz musician has played on. Social similarity would be more likely to capture that info.
I used to use Predixis Magic Mixer. It will perform a brief analysis of the audio in a file, produce a "finger print" and compared it to fingerprints in a central database. If listed, it would set an identification code which is the result of the analysis of the entire file into the client copy. If not, it would do a full analysis on the client computer (takes a while) and upload that to the central database and keep the local copy as well. From that information it can set up a play list that relates tunes, one to another' depending upon the actual sounds. I have not used it for a few years so I don't know if the central database servers still are in operation, but a web search says no. It should still work, but every file will require full analysis.

Resources